vector数组优点:
和普通数组相比,不需要定义数组长度,而且长度可更改,节约空间,可以存放任意对象,可以拷贝赋值,可以在长度以外增加长度。
头文件:#include< vector >
构造声明:vector<类型>数组名
例如:vector< int >a
定义了一个储存整数的动态数组a
具体操作:
1.插入元素:
数组名.push_back(元素);
2.获取数组长度:
数组名.size()
示例:
#include<bits/stdc++.h>
using namespace std;
vector<int> a;
int main()
{
a.push_back(1);//插入元素1
a.push_back(2);//插入元素2
a.push_back(3);//插入元素3
a.push_back(4);//插入元素4
for(int i=0;i<a.size();i++)//获取数组长度
printf("%d ",a[i]);//输出数组各元素
return 0;
}
注意:动态数组下标和普通数组一样从a[0]开始,访问方式可以和普通数组相同
3.改变数组元素:
数组名[下标]=新元素
示例:
#include<bits/stdc++.h>
using namespace std;
vector<int> a;
int main()
{
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
a[2]=0;//改变元素
for(int i=0;i<a.size();i++)
printf("%d ",a[i]);
return 0;
}
结果:
4.删除元素(只能删除末端)
数组名.pop_back();
示例:
#include<bits/stdc++.h>
using namespace std;
vector<int> a;
int main()
{
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
a.pop_back();//删除末端元素
for(int i=0;i<a.size();i++)
printf("%d ",a[i]);
return 0;
}
结果:
5.清空
数组名.clear();(只清空vertor,不会清空内存)
示例:
#include<bits/stdc++.h>
using namespace std;
vector<int> a;
int main()
{
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
a.clear();//清空所有元素
for(int i=0;i<a.size();i++)
printf("%d ",a[i]);
return 0;
}
结果:
7.数组初始化
声明:vector<类型>数组名(初始化长度,初始数)
例如:
int n=0;
vector< int >a(1000,n);
将数组初始化为零
示例:
#include<cstdio>
#include<vector>
using namespace std;
int main()
{
int n;
vector<int>a(10,1);//初始化为1
for(int i=0;i<a.size();i++)
printf("%d ",a[i]);
return 0;
}
结果:
另一种初始化(针对二位vector):
vector< int > a[maxn];
int m,n;
for(int i=0;i<m;i++){
a[i].resize(n);
}
8.删除指定元素
用迭代器删除
#include<bits/stdc++.h>
using namespace std;
vector<int> ve;
int main(){
ve.push_back(1);
ve.push_back(2);
ve.push_back(3);
for(vector<int>::iterator it = ve.begin(); it !=ve.end(); it ++){
if(*it==2){//删除元素2
ve.erase(it);
break;
}
}
for(int i = 0; i < ve.size(); i ++ ){
cout<<ve[i]<<endl;
}
return 0;
}