C++容器

vector

基本特点:
1.内存连续,方便访问
2.动态内存,在数据满时,会自动进行扩容,避免越界访问
3.可以进行插入和删除,效率跟操作位置有关,尾的效率最高
#include <iostream>
#include <vector>
using namespace std;void travl_iter(vector<int>& v)
{//vector<int>::iterator it; //普通迭代器vector<int>::const_iterator it;//常量迭代器cout << endl;for(it=v.begin();it!=v.end();it++){//(*it)++;cout << *it << ",";}cout << endl;
}void travl(vector<int>& v)
{cout << endl;for(int i=0;i<v.size();i++){cout << v[i] << ",";}cout << endl;
}void print(vector<int>& v,int flag)  //正向遍历
{if(flag){travl_iter(v);}else{travl(v);}
}void rprint(vector<int>& v) //反向遍历
{//vector<int>::iterator it; //普通迭代器//vector<int>::const_iterator it;//常量迭代器vector<int>::reverse_iterator it;//反向迭代器cout << endl;for(it=v.rbegin();it!=v.rend();it++){//(*it)++;cout << *it << ",";}cout << endl;
}void print_c11(vector<int>& v)  //C++ 11新特性,使用for来遍历容器
{for(auto num : v){cout << num << ",";}cout << endl;
}int main()
{int arr[] = {1,2,3,4,5};           //没有定义初始容量vector<int> v1;vector<int> v2{1,2,3,4,5,6,};       //初始容量为6vector<int> v3(10);vector<int> v4(10,2);vector<int> v5(v4);vector<int> v6(arr,arr+2);cout << v2.at(3) << endl;cout << v2[3] << endl;/*cout << v2.at(10) << endl;      //越界访问,抛出异常cout << v2[10] << endl;         //不抛出异常,需谨慎
*/cout << v1.size() << endl;cout << v2.size() << endl;
/*v2.clear();                     //清空元素,元素个数减少,但容量不变cout << v2.size() << endl;
*/
/*vector<int>::iterator it;it = v2.erase(v2.begin()+2);    //删除第三个元素,获得下一个元素的迭代器,遍历删除其中某个元素需要注意cout << "cur:" << *it << endl;cout << v2.size() << endl;cout << v2.capacity() << endl;
*/cout << v2.capacity() << endl;  //6v2.push_back(20);               //扩容翻倍 cout << v2.capacity() << endl;  //12v2.resize(3);                   //调整实际元素个数为3v2.insert(v2.begin(),3,2);      //在开头插入3个2v2.insert(v2.end(),arr,arr+3);print_c11(v2);v2.erase(v2.begin(),v2.begin()+3);print_c11(v2);v2.swap(v6);;print_c11(v2);cout << v2. capacity() << endl;return 0;
}

list

1.内存不连续,不支持随机fangw
2.插入和删除较为便利
3.删除元素后一定要接收返回值,不然迭代器失效(无法获取下一个元素的位置)
#include <iostream>
#include <list>
#include <vector>
using namespace std;int main(){//错误行为vector<int> v(10,1024);vector<int>::iterator vit;for(vit = v.begin();vit!=v.end();vit++){if(*vit == 1024)v.erase(vit);	//无法获取下一个迭代器位置}//正确操作list<int> l(10,1024);list<int>::iterator it;for(it=l.begin();it!=l.end();it++){if(*it == 1024)it = l.erase(it);//一定要接收返回值 否则it失效了}it = l.begin();//it = it+4;return 0;	
}

map

1.键值对<key,value>
2.底层实现红黑树
#include <iostream>
#include <map>
using namespace std;int main(){map<string,int> stu;stu.insert(pair<string,int>("zhangsan",100));stu["lisi"] = 99;stu.insert(map<string,int>::value_type("zhaowu",80));map<string,int>::iterator mit;mit = stu.find("lisi");	//通过key减查找if(mit != stu.end())cout << "Yes" << endl;else cout << "No" << endl;cout << stu.size() << endl;return 0;
}

set

1.只有值
2.存储同一类型
3.内部数据自动排序
#include <iostream>
#include <set>
using namespace std;//类
class Desc{//函数对象,实现内部排序(升/降)
public:bool operator()(const int& t1,const int& t2){return t2<t1;}
};int main(){//set<int,Desc> s;set<int> s;s.insert(10);s.insert(6);s.insert(3);s.insert(5);s.insert(7);s.insert(15);set<int>::iterator it;for(it=s.begin();it!=s.end();it++){cout << *it << " ";	}cout << endl;set<int>::reverse_iterator rit;for(rit=s.rbegin();rit!=s.rend();rit++){cout << *rit << " ";	}cout << endl;return 0;	
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/665175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArrayList常见问题

ArrayList 1、ArrayList底层的实现原理是什么 2、ArrayList list new ArrayList(10)中的list扩容几次 3、如何实现数组和list之间的转换 4、ArrayList和LinkedList的区别是什么

办公软件巨头CCED、WPS面临新考验,新款办公软件异军突起

办公软件巨头CCED、WPS的成长经历 众所周知&#xff0c;CCED和WPS在中国办公软件领域树立了两大知名品牌的地位。然而&#xff0c;它们的成功并非一朝一夕的成就&#xff0c;而是历经了长时间的发展与积淀。 在上世纪80年代末至90年代初&#xff0c;CCED作为中国大陆早期的一款…

java大学生科研创新项目在线管理系统 springboot+vue

预期成果&#xff1a; &#xff08;1&#xff09;实现一个完整的大学生科创项目在线管理系统的设计与实现&#xff0c;可以运行演示。 &#xff08;2&#xff09;预计本系统的页面完整&#xff0c;页面所有文字和图片无漏字、错字、重叠不显示的现象&#xff0c;页面所有链接和…

Unity Meta Quest MR 开发(三):Scene API 配置+实现虚拟与现实之间的碰撞

文章目录 &#x1f4d5;教程说明&#x1f4d5; Scene 配置⭐开启场景理解功能和应用访问空间数据的权限⭐OVRSceneManager⭐制作 Plane Prefab 和 Volume Prefab⭐运行场景⭐添加透视材质 &#x1f4d5;虚拟与现实物体的碰撞&#xff08;弹球 Demo&#xff09;&#x1f4d5;Mes…

web前端--------渐变和过渡

线性渐变&#xff0c;是指颜色沿一条直线进行渐变&#xff0c;例如从上到下、从左到右。 当然&#xff0c;CSS中也支持使用角度来设置渐变的方向&#xff0c;角度单位为deg。 0deg&#xff0c;为12点钟方向&#xff0c;表示从下到上渐变。 90deg&#xff0c;为3点钟方向&…

Android13源码下载及全编译流程

目录 一、源码下载 1.1、配置要求 1.1.1、硬件配置要求 1.1.2、软件要求 1.2、下载环境搭建 1.2.1、依赖安装 1.2.2、工具安装 1.2.3、git配置 1.2.4、repo配置 1.3、源码下载 1.3.1、明确下载版本 1.3.2、替换为清华源 1.3.3、初始化仓库并指定分支 1.3.4、同步全部源码 二、…

【24美赛思路已出】2024年美赛A~F题解题思路已出 | 无偿自提

A题&#xff1a;资源可用性和性别比例 问题一&#xff1a; 涉及当灯鱼种群的性别比例发生变化时&#xff0c;对更大的生态系统产生的影响。为了分析这个问题&#xff0c;可以采用以下的数学建模思路&#xff1a;建立灯鱼种群模型&#xff1a; 首先&#xff0c;建立一个灯鱼种群…

20240203在WIN10下安装Miniconda

20240203在WIN10下安装Miniconda 2024/2/3 21:06 缘起&#xff1a;最近学习stable-diffusion-webui.git&#xff0c;在Ubuntu20.04.6下配置SD成功。 不搞精简版本&#xff1a;Miniconda了。直接上Anacoda&#xff01; https://www.toutiao.com/article/7222852915286016544/ 从…

Vue组件通信讲解[父子组件通信]

Vue组件通信讲解 在Vue中&#xff0c;父子组件之间的通信可以通过props和emit来实现。props用于从父组件向子组件传递数据&#xff0c;而$emit用于从子组件向父组件触发事件。 以下是一个包含子传父和父传子通信的Vue案例解决方案&#xff1a; 父组件&#xff1a;Parent.vue…

Qt 的安装以及项目的创建

目录 Qt简介Qt 开发环境安装的过程环境变量的配置Qt SDK 中的重要的工具创建一个 Qt 项目 Qt简介 开始安装教程前&#xff0c;首先来了解一下什么是QT。 QT&#xff08;Quick Thought&#xff09;是一个基于Qt库的快速应用程序开发框架。它提供了一套完整的开发工具和库&…

文本检测学习笔记_CTPN

论文地址&#xff1a;https://arxiv.org/pdf/1609.03605.pdf 开源代码&#xff1a;https://github.com/lvliguoren/pytorch_ctpn?tabreadme-ov-file 本文主要的的内容 提出了一种将文本视为由密集排列的具有固定宽度的文本候选区域组成的序列的方法。这些文本候选区域可以通…

国际国内 IT行业有哪些证书含金量高?

一、前言 在信息技术飞速发展的今天&#xff0c;IT行业证书作为衡量专业技能和知识水平的重要标准&#xff0c;越来越受到业界的重视。对于IT从业者而言&#xff0c;拥有一些权威性的证书不仅能够证明自己的专业能力&#xff0c;更是职业发展的有力助推器。基于多年的行业经验…

Python中with管理上下文

上下文管理器 上下文管理器本质就是能够支持with操作。 任何实现了 __enter__() 和 __exit__() 方法的对象都可称之为上下文管理器&#xff0c;上下文管理器对象可以使用 with 关键字。显然&#xff0c;文件&#xff08;file&#xff09;对象也实现了上下文管理器协议。 实现…

【数据结构与算法】二叉树前序,中序,后序遍历非递归版。Leetcode接口

144. 二叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09; 如果根节点为空&#xff0c;直接返回。初始化一个辅助栈 s&#xff0c;并将根节点入栈。重复以下步骤&#xff0c;直到栈为空&#xff1a; 检查当前节点 tmp&#xff1a; 如果 tmp 不为空&#xff1a; 将当前节…

寒假作业-day2

进程间通信的7种方式&#xff0c;总结出他们的优点 1. 内核提供的原始通信方式有三种 1.1 无名管道 1.2 有名管道 1.3 信号 2. System V提供了三种通信方式 2.1 消息队列 2.2 共享内存 3.1 信号量&#xff08;信号灯集&#xff09; 3. 套接字通信&#xff1a;socket …

十一、计算机分类

1、按照性能和用途分类 计算机分类 计算机按照性能、用途和规模可以分为以下几种类型&#xff1a; 1&#xff09;巨型机&#xff08;超级计算机&#xff09; 采用大规模并行处理体系结构。运算速度最快、体积最大、价格最昂贵。主要用于尖端科学研究领域&#xff0c;如灾难预测…

《计算机网络简易速速上手小册》第2章:计算机网络协议和标准(2024 最新版)

文章目录 2.1 IPv4 与 IPv6 - 网络世界的地址簿2.1.1 基础知识2.1.2 重点案例&#xff1a;使用 Python 查询本机 IPv4 和 IPv6 地址2.1.3 拓展案例1&#xff1a;使用 Python 创建简单的 IP 地址转换工具2.1.4 拓展案例2&#xff1a;使用 Python 检测本地网络的 IP 版本支持 2.2…

前端学习02

1.CSS案例 1.1 内容回顾 1.1.1 搭建骨架 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>body{margin: 0;}.sub-header{height: 100px;background-color: #b0b0b0…

js中常用数组去重方法

js中常用去重方法 一、使用 Set ES6 提供了 Set 类型&#xff0c;它可以自动去重 const arr [1, 2, 2, 3, 3, 4]; const newArr Array.from(new Set(arr)); console.log(newArr ); // [1, 2, 3, 4]二、使用 filter 方法 const arr [1, 2, 2, 3, 3, 4]; const newArr ar…

unity 导出H5

Unity 输出html5_mob649e8157aaee的技术博客_51CTO博客 Unity打包WebGL报Unable to parse Build/*.framework.js.gz This can happen if build compression was......._unable to load file build/out.framework.js.gz! che-CSDN博客