目录
前言
本文章为学习过程中的总结,部分参考文章已附文末,欢迎内容上、排版上、表达上各种批评指正😀。
一、vector 特点
- 是顺序容器,支持随机访问;
- 尾部添加元素时无需重新分配空间;
- T(访问) = a;
- 初始创建时容量为 0,谨防数组越界;
二、c++ 中使用
1. 头文件
#include <vector>
2. 初始化
1)//容量缺省默认为 0,值缺省默认为 0
vector<ElementType> var_name [(容量,值)];
2) // 初始化拷贝
vector<ElementType> var_name (另一个同类 vector);
或 vector<ElementType> var_name = 另一个同类 vector;
3)//直接赋值
vector<ElementType> var_name = {elem1, elem2, elem3,};
4)//切片获取另一个 vector 的局部/全部
vector<ElementType> var_name(another_vector.begin(), another_vector.end());
3. 访问元素
1)创建迭代器访问
vector<ElementType>::iterator i;//正向迭代器,i++
vector<ElementType>::reverse_iterator j;//反向迭代器,j--
*i;//访问对应的元素值
2)迭代器定位
- (正向迭代器)定位开头:i = var_name.begin();
- (正向迭代器)末尾:i = var_name.end() - 1;//end() 返回最后一个元素后面位置的迭代器;
- (反向)末尾:j = var_name.rbegin();
- (反向)开头:j = var_name.rend();
3) 随机访问
在容量已知的情况下可以利用 var_name[k] 访问第 k + 1 个元素(k 从 0 开始);
不知道容量的话小心越界。
4) 头尾快速访问
- var = var_name.front();
- var = var_name.back();
5) 遍历
(正向迭代器)
for(i = var_name.begin(); i != var_name.end(); i++){
cout<< *i;
}
(反向迭代器倒着输出)
for(j = var_name.rbegin(); i != var_name.rend(); j++){
cout<< *j;
}
(随机访问)
for(int k = 0; k < var_name.size(); k++){
cout<< var_name[k];
}
4. 获得 vector 的属性
1)判空 var_name.empty(); // 空返回 true
2)大小 var_name.size();
5. 增删改元素
1)末尾增加元素 var_name.push_back(elem1)
等同于 var_name.emplace(elem1) // 据说更高效
2) 定位插入(3 类)
- iterator insert( iterator loc, const TYPE &val ); //在指定迭代器位置插入某值,返回插入值的迭代器
- void insert( iterator loc, size_type num, const TYPE &val ); //要插入的迭代器位置,插入元素数量,元素的值
- void insert( iterator loc, input_iterator start, input_iterator end ); //要插入的迭代器位置,插入元素迭代器起始~结束位置,便于插入某一段的元素进去
3)删除末尾 var_name.pop_back()
4)清空 var_name.clear()
5)定位删除
- iterator erase(iterator position); // 指定某个迭代器的值删除
- iterator erase(iterator first, iterator last); // 制定一段区间删除
6)修改:访问后直接改值;
6. 特殊
交换 var_name.swap(& another_vector);