vector初始化方法
1 2 3
| vector<int> vec; 初始化size为0的vector vector<int> vec(10); 初始化size为10,默认值都为0的vector vector<int> vec(10,1); 初始化size为10,值都为1的vector
|
通过数组初始化
通过数组a的地址初始化,注意地址是从0到5(左闭右开区间),类似迭代器
1 2
| int a[5] = {1,2,3,4,5}; vector<int> vec(a, a+5);
|
通过vector初始化
1 2
| vector<int> a(5,1); vector<int> b(a);
|
通过insert初始化
insert初始化方式将同类型的迭代器对应的始末区间(左闭右开区间)内的值插入到vector中
//助记,插入开始的地方
1 2 3
| vector<int> a(6,6); vecot<int> b; b.insert(b.begin(), a.begin(), a.begin() + 3); 将a[0]~a[2]插入到b中,b.size()由0变为3
|
insert还可以插入m个值为n的元素
1 2
| 在b开始位置处插入6个6 b.insert(b.begin(), 6, 6);
|
通过copy函数赋值
//助记,拷贝到目标地
1 2 3 4 5 6 7
| vector<int> a(5,1); int a1[5] = {2,2,2,2,2}; vector<int> b(10); 将a中元素全部拷贝到b开始的位置中,注意拷贝的区间为a.begin() ~ a.end()的左闭右开的区间 copy(a.begin(), a.end(), b.begin()); 拷贝区间也可以是数组地址构成的区间 copy(a1, a1+5, b.begin() + 5);
|
常用操作
注意:
std::vector 不支持 push_front,,它的目的是为了O(1)的push_back(),对它来说O(n)次的insert()就能做到push_front。
支持push_front()的是deque支持的是deque。
加入元素
1 2 3 4
| q.push_back(x); 尾部加入元素 q.insert(iter,x); 在iter位置插入x,传回新数据位置 q.insert(iter,n,x); 在iter位置插入n个x,无返回值 q.insert(iter,l,r); 在iter位置插入[l,r)区间内的数据,无返回值
|
vector交换
1 2
| q.swap(p); 交换p,q容器内元素 q.assign(iter1,iter2);
|
删除元素
1 2 3
| q.pop_back(); 删除最后一个元素 q.erase(iter1); 删除iter位置元素,返回值是指向被删元素之后的那个元素(即下一个元素)的迭代器。 q.erase(iter1,iter2); 删除[iter1,iter2)区间内的元素
|
清空/覆盖
1 2
| q.clear(); q.assign(n,x);
|
返回元素
1 2 3
| q.front(); 返回第一个数据 q.back(); 返回最后一个数据 q.at(i);
|
vector元素个数/是否为空
1 2 3
| q.size(); 返回容器内成员个数 q.resize(x); q.empty(); 判断Vector是否为空
|
迭代器
1 2 3 4
| q.begin(); q.end(); q.rbegin(); q.rend();
|
vector内存容量
1 2
| q.capacity(); q.reserve();
|
二维vector的初始化
1 2 3 4 5 6 7 8 9
| vector<vector<int>> vec1; int row = 3; int col = 3; vec1.resize(row); for(int i=0;i<vec1.size();i++) vec1[i].resize(col); for(int i=0;i<row;i++) for(int j=0;j<col;j++) vec1[i][j]=5;
|
或者
1
| vector<vector<int> >vec(row,vector<char>(col,5));
|
参考资料
C++ 给vector去重的两种方法
vector的几种初始化及赋值方式
STL中erase()的用法