vector
#include < vector > 向量,不定长数组。
与数组的区别在于声明时不需要指定长度,vector动态分配空间(线性连续地址)。插入和删除都比数组要方便很多。vector可以直接赋值,还可以作为函数的参数或者返回值,而无须像传递数组那样用另一个变量指定元素个数。
- 创建vector对象:
//默认初始化,v1为空
vector<int> v1;
//初始10个值为0的元素
vector<int> v2(10);
//初始10个值为8.6的元素
vector<double> v3(10,8.6)
- 访问:
//直接通过下标就能访问
v2[2]=3;
cout<<v2[2]<<endl;
//通过迭代器访问
cout<<*(v2.begin()+2)<<endl
- 遍历
//①通过下标遍历
for(int i=0;i<v3.size();i++)
cout<<v3[i]<<' ';
//②通过迭代器遍历(推荐)
vector<int>::iterator it;
for(it=v2.begin();it!=v2.end();it++)
{
cout<<*it<<' ';
}
- 插入元素
// ①元素尾部扩张
v.push_back(9);
// ②指定位置插入
v.insert(v.begin()+2,1);
v.insert(v.end(),3);
- 删除元素
//删除单个元素
v.erase(v.begin()+1);
//删除区间内所有元素
v.erase(v.begin()+2,v.begin()+5);
//清空
v.clear();
查找元素
需要查操作的话一般不使用vector,而是set或multiset。
方法:在vector中查找元素及其位置排序
//递增
sort(v.begin(),v.end());
//递减
sort(v.begin(),v.end(),greater<int>());
//自定义结构体排序
struct Node
{
int a;
int b;
};
bool cmp(Node x,Node y)
{
return x.a<y.a;
}
vector<Node> v;
sort(v.begin(),v.end(),cmp);
- 其他
//元素反向排列
reverse(v.begin(),v.end());
//获取向量大小(元素个数)
v.size()
//向量是否为空
v.empty()