vector(向量)为封装了动态大小的顺序容器,可以理解为变长数组,长度可以任意变化,甚至定义时令其长度为0
与数组类似,可以直接访问(下标)
1.初始化
#include <vector>
vector<typename> name; //typename可为简单或复合类型
vector<Node*> n;
vector<int> a; //长度为0的vector
vector<int> a(100); //长度100,值默认均为0(int时)
vector<int> a(100,2) //长度为100,且值均为2
vector<int> a{1,2,3,4}; //直接指定内容
2.访问
a[i]
、 * (a.begin() + i )
相同
注意:i
为迭代器,则取迭代器的值:*i
迭代器遍历元素: ++i
和 i++
//迭代器访问
vector<int>::iterator it;
it=a.begin();
*it==a[0]; //迭代器访问=下标访问
3.遍历
vector的迭代器不支持 i < a.end()
写法,因此循环条件只能用 i != a.end()
for(int i=0;i<a.size();i++){ //下标访问
cout<<a[i]; //此时a[i]必须存在
}
//vector<typename>::iterator it;
for(auto i=a.begin();i!=a.end();i++) //迭代器只有=或者!=,没有i<a.end()
cout<< *i;
for(auto i:a){ //此时的i为a中元素,不是迭代器
cout<< i;
4.常用函数(插入、删除…)
a.size(); //元素个数
a.back(); //a的最后一个元素
a.front(); //a的第一个元素
//插入
a.insert(i,val); //迭代器i前插入
a.push_back(val); //数组尾部插入
//删除
a.pop_back(); //弹出尾元素
vi.earse(i); //删除迭代器i处元素,不可以写下标
v1.erase(a.begin(),a.begin()+2); //删除前两个元素(含前不含后)
a.clear(); //清空
a.empty(); //判空,空返回1
返还值
//返回空数组
return {};
//返回固定的vector,例如int
return {1,2};
#include<algorithm>
常用算法:
//以下均为含前不含后
sort(a.begin(),a.end()); //排序
reverse(a.begin(),a.end()); //逆置
copy(a.begin(),a.end(),b.begin()+1); //复制,将a覆盖到b中,从b.begin()+1(包括)位置开始
find(a.begin(),a.end(),10); //查找,返回位置
\qquad
二维数组
1.初始化
//初始化m*n的二维数组
vector<vector<int>> array(m); //初始化大小为m的数组,每个元素均为vector<int>类型,即array[m][]
for(int i=0;i<m;i++)
{
array[i].resize(n); array[m][n]
}
//创建⼀个row⾏,column列(初始值均为0)的⼆维数组
vector<vector<int>> a(row,vector<int>(column,0));
2.遍历
行数int row=a.size();
列数int column=a[0].size();
//迭代器遍历
for(i = a.begin(); i != a.end(); i++){ //遍历一维
auto temp = *i; //迭代器解引用,此时temp为vector<int>类型
for(it = temp.begin(); it != temp.end(); it++)
cout << *it << "";
//下标遍历
vector<vector<int>> a(row,vector<int>(column,0));
for(int i=0;i<a.size();i++)
for(int j=0;j<a[0].size();j++)
cout<<a[i][j];