前言:容器包括
顺序容器(如vector,队列deque,list,array,string等,特点是具备快速访问容器元素的能力)
关联式容器(如set,map等,特点是支持高效的关键字查找)
1,特点:动态数组,更具操作性
2,常用函数
vector<int>v;
int x = 1;
int y = 3;
v.push_back(x);//尾增
v.pop_back();//尾删
v.at(y);//得到v[y]位置的数值
v.front();//获得首元素的值
v.back();//获得尾元素的值
v.size();//元素个数
v.clear();//清空元素
v.empty();//元素为空返回1,否则返回0
3,常用迭代器及结合迭代器使用的函数
(迭代器,迭代器)(eg:(v.begin(),v.end())的使用有一个特点:
他的操作对象是包括括号左边,不包括括号右边
如(v.begin()+2,v.begin()+10)是对(第2个到第9个操作)(从第0个开始数),操作数是(10-2==8)个,这跟最基础的sort一样,sort(1,n+1)是对第1个到第n个操作,共操作(n+1)-1==n个
vector<int>v;
vector<int>a;
int k = 2;
v.begin();//指向第一个元素
v.rbegin();//指向最后一个元素
v.rend();//指向第一个元素前面的一个位置
v.end();//指向最后一个元素后面的一个位置(相当于\0)
//erase有删除一个于多个俩种写法
v.erase(v.begin() + k);//删除第k个元素(从第0个开始数)
v.erase(v.begin() + 3, v.begin() + 7); //删除容器第3,4,5,6共(7-3=4)个元素(从第0个开始数)
//insert的使用,在指定迭代器后面插入一个或者多个元素
v.insert(v.begin() + 2, 5);//在第二个后面插入5这个元素
v.insert(v.begin()+1,3,666);//在第一个后面插入3个值为666的三个元素
v.insert(v.begin()+6,{233,666});//用大括号括起来多个元素,在第六个后面插入233,666这俩个元素
v.insert(v.begin(),a.begin(),a.end());//在第0个元素后面插入a容器所有元素
4,几个常用算法(使用algorithm库的,不是容器自带)
vector<int>v;
vector<int>a;
//reverse将头尾元素完全倒过来
reverse(v.begin(),v.end());//把这个区间元素全部倒装
//copy,将一个容器的一个区间里的值全部放到另一个容器里面
copy(a.begin()+2,a.begin()+5,v.begin()+6);//将a的[2,5)区间里面的元素复制(覆盖原来的值)到v中,从v的第六个开始存入(包括第六个),注意,copy只会对v已经开辟的空间进行copy,超过则不访问
//find 查询区间是否有某个值
find(v.begin(),v.end(),666);//查询这个区间是否存在666这个值,有则返回这个值,没有就返回v.end()
//具体使用方法
if(find(v.begin(),v.end(),666)!=v.end()){
cout<<*find(v.begin(),v.end(),666);//注意,find返回的是迭代器(指针),需要*来获得地址
}