STL之vector:长度根据需要自动改变的数组 解决超内存问题或以邻接表的方式存储图
需要头文件<vector>
1、定义数组:
//vector<typename>name;
vector<int>a;//相当于一维数组a[size];
vector<double>b;
vector<char>c;
vector<node>d;//结构体
vector<vector<int> >;//>和>之间要加空格
//二维数组:vector<typename>Arrayname[arraysize];
vector<int>v[100];//一维长度已经固定为arraysize,二维长度才是“变长”的
//输入输出与普通数组相同 cin>>a[i];
2、访问元素
(1)通过下标访问 v[0] v[1] 注意:下标为从0到v.size()-1
(2)通过迭代器访问
vector<int>::iterator it;//可以通过*it访问vector里的元素
vector<double>::iterator it;
v.begin()为取v的首元素地址
v.end()不取尾元素地址,取尾元素的下一个地址,不储存任何元素
v[i]和*(v.begin+i)等价 注意:只有在vector和string中才能用这种迭代器加整数的写法
vector<int>::iterator it=v.begin();
for(int i=1;i<5;i++)
print("%d",*(it+i));//输出v[i];
for(vector<int>::iterator it=v.begin();it!=v.end;it++)//不支持it<v.end
//迭代器也可以自加自减
print("%d",*it);
3、push_back(x):在vector末尾添加一个元素x,时间复杂度O(1);
for(int i=1;i<=3;i++)
{v.push_back(i);}//将1,2,3,分别插入末尾
v.push_back(5);
for(int i=0;i<v.size;i++)
{printf("%d",v[i]);}//结果 1235
4、pop_back():删除最后一个元素
for(int i=1;i<=3;i++)
{v.push_back(i);}
v.pop_back();//输出结果为12;
5、size():
v.size();返回数组v的长度,返回的是unsigned类型 一般用%d
6、clear():
v.clear();清空所有元素,此时长度为0 时间复杂度O(N) (N为元素个数)
7、insert():
向vector的任意迭代器it处插入一个元素x 时间复杂度O(N)
for(int i=1;i<=5;i++)
{v.push_back(i);}//此时为1,2,3,4,5
v.insert(v.begin()+2,-1);//令v[2]=-1,此时为1,2,-1,3,4,5,
8、erase():
(1)删除单个元素
//假设原数组为5,6,7,8,9
v.erase(v.begin()+3);//因为v.begin()对应v[0],所以删除v[3],即8
(2)删除一个区间元素 :v.erase(v.begin()+x,v.begin()+y) 删除[x,y)所有的元素
//5,6,7,8,9
v.erase(v.begin()+1,v.begin()+4);//删除v[1,2,3],输出5,9
//清除所有元素则v.erase(v.begin(),v.end())