一、vector介绍:
1.vector是一个可变大小数组的序列容器,它的大小是动态改变的,并且是被容器自动处理。
2.vector使用动态分配数组来储存它的元素,当新元素插入时,若是需要增加空间。其做法是,申请一个新的数组,但是要注意的是每次扩大不是1,而是有规律的,vs是每次扩大已有的一半,vc6.0则是扩大为原来的两倍,不同的库采用不同的策略权衡空间的使用和重新分配。
3.相比其它动态序列容器,vector在访问尾部元素更高效,是常数复杂度。其他位置的元素访问则会更低。
头文件:
1.#include<vector>
二、声明及其初始化:
1.vector<int> vec;//声明一个int型向量;当数据类型是char时,与stirng会很类似。
2.vector<int> vec(n);//声明一个大小为n的int向量。
3.vector<int> vec(n,x);//声明一个初始化为n个值都是x的向量。
4.vector<int> vec2(vec1);//用vec1初始化vec2,拷贝构造。
5.vector<int> vec2(vec1.begin(),vec1.begin()+3);//用向量vec的前三个值初始化vec2。
6.int x[5]={1,2,3,4,5};
vector<int> vec(x,x+5);//用数组的前5个元素初始化vec。
vector<int> vec(&x[1],&x[3]);//将x[1]~x[3]范围内的元素作为vec的初始值。即x[1],x[2]两个元素。
不包括x[3],这是因为末尾指针总是指着末尾的下一个位置。上面也是如此。
三、容量:
1.向量大小:vec.size();
2.向量最大容量:vec.max_size();
3.更改向量大小:vec.resize();
4.向量真实大小:vec.capacity();
5.向量判空:vec.empty();
6.减小向量大小到满足元素所占存储空间的大小:vec.shrink_to_fit();
四、迭代器
1.开始指针:vec.begin();
2.末尾指针:vec.end(); //指向最后一个元素的下一个位置
3.指向常量的开始指针: vec.cbegin(); //意思就是不能通过这个指针来修改所指的内容,但可以通过其他方式修改的,而且指针也是可以移动的。
4.指向常量的末尾指针: vec.cend();
五、修改
1.多个元素赋值:vec.assign();//和构造函数中的3、6很像。详细见STL--Reference
http://www.cplusplus.com/reference/vector/vector/assign/
2.末尾添加元素:vec.push_back();
3.末尾删除元素:vec.pop_back();
4.任意位置插入元素:vec.insert();//示例代码可见 https://blog.csdn.net/qq_38588998/article/details/81288705
5.任意位置删除元素:vec.erase(); vec.erase(vec.begin()+4);//删除第5个 vec.erase(vec.begin(),vec.begin()+3);//删除前三个
6.交换两个向量的元素:vec.swap(); vec1.swap(vec2);//向量vec1与向量vec2互换元素
7.清空向量元素:vec.clear();
六、元素访问
1.下标运算符:vec[1];//并不会检查越界,越界时程序崩溃
2.at()方法:vec.at(1);//检查越界,越界时抛出out of range异常
3.访问最后一个元素:vec.back();
4.访问最后一个元素:vec.front();
5.返回一个指针,并指向向量所对应的数组:int *p=vec.data();