vector常用操作 - STEMHA's Blog

vector常用操作

vector初始化方法

1
2
3
vector<int> vec;       初始化size为0vector
vector<int> vec(10); 初始化size为10,默认值都为0vector
vector<int> vec(10,1); 初始化size为10,值都为1vector

通过数组初始化

通过数组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开始位置处插入66
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); //将区间[iter1,iter2)内元素赋值给vector,并清空vector容器之前的内容。

删除元素

1
2
3
q.pop_back(); 删除最后一个元素
q.erase(iter1); 删除iter位置元素,返回值是指向被删元素之后的那个元素(即下一个元素)的迭代器。
q.erase(iter1,iter2); 删除[iter1,iter2)区间内的元素

清空/覆盖

1
2
q.clear(); //清空Vector
q.assign(n,x); //将n个x赋值到vector中,并清空vector容器之前的内容。

返回元素

1
2
3
q.front(); 返回第一个数据
q.back(); 返回最后一个数据
q.at(i); //返回第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(); //返回Vector可用空间的大小
q.reserve(); //重新指定空间大小,小于当前capacity时保持为原本的capacity值

二维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()的用法

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×