一:关联容器和顺序容器
c++中有两种类型的容器:顺序容器和关联容器,顺序容器主要有:vector、list、deque等。其中vector表
示一段连续的内存地址,基于数组的实现,list表示非连续的内存,基于链表实现。deque与vector类似,但是对
于首元素提供删除和插入的双向支持。关联容器主要有map和set。map是key-value形式的,set是单值。map
和set只能存放唯一的key值,multimap和multiset可以存放多个相同的key值。
容器类自动申请和释放内存,我们无需new和delete操作。
1,vector
作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。
特别注意:
使用vector需要注意以下几点:
1、需要包含头文件#include<vector>
2、如果你要表示的向量长度较长(需要为向量内部保存很多数),容易导致内存泄漏,而且效率会很低;
3、Vector作为函数的参数或者返回值时,需要注意它的写法:
double Distance(vector<int>&a, vector<int>&b) 其中的“&”绝对不能少!!!
使用方法:
1,定义和初始化
vector<int> vec1; //默认初始化,vec1为空
vector<int> vec4(10); //10个值为0的元素
vector<int> vec5(10,4); //10个值为4的元素
2,常用操作方法
vec1.push_back(100); //尾部添加元素
int size = vec1.size(); //元素个数
bool isEmpty = vec1.empty(); //判断是否为空
cout<<vec1[0]<<endl; //取得第一个元素
vec1.insert(vec1.end(),5,3); //从vec1.back位置插入5个值为3的元素
vec1.pop_back(); //删除末尾元素
vec1.erase(vec1.begin(),vec1.begin()+2);//删除vec1[0]-vec1[2]之间的元素,
不包括vec1[2]其他元素前移
cout<<(vec1==vec2)?true:false; //判断是否相等==、!=、>=、<=...
vector<int>::iterator iter = vec1.begin(); //获取迭代器首地址
vector<int>::const_iterator c_iter = vec1.begin(); //获取const类型迭代器
vec1.clear();
说明:用下标方式添加数据是要不是不要越界,要注意初始化时的大小,而pushback()函数则不用考虑这个问题
3,遍历方法 //下标法 int length = vec1.size(); for(int i=0;i<length;i++) { cout<<vec1[i]; } cout<<endl<<endl; //迭代器法 vector<int>::iterator iter = vec1.begin(); for(;iter != vec1.end();iter++) { cout<<*iter; }