C++vector常见用法总结
在用c++编程时,经常会遇到无法确定元素个数或者可变大小的数组,这时使用灵活的vector容器十分方便,下面对经常使用的用法进行总结。
一、头文件:#include<vector>,要接using namespace std;使命名空间std内定义的所有标识符都有效。
二、声明及初始化:
vector<T>a;//声明一个T型容器a
vector<T> a(n);//声明一个初始大小为n的容器
vector<T> a(n,i); //声明一个初始大小为n且初始值都为i的容器
vector<T> b(a);//声明并用容器a初始化容器b
vector<T> b(a.begin()+m, a.begin()+n) ;//声明容器b并用a中元素从第m个到第n个初始化b
//可以直接使用数组来初始化向量:
int a[] = {1,2,3,4,5,6,7,8,9} ;
vector<int> b(a, a+n) ;//声明容器b并用数组a的前n个元素初始化容器b
vector<int> b(&a[m], &a[n]) ;//声明容器b并用a[m]~a[n]范围内的元素初始化容器b
三、基本操作:
vector<T>v
1、迭代器:
v.begin() 返回指向容器第一个元素的迭代器
v.end() 返回指向容器最后一个元素的迭代器
2、插入:insert--任意位置
v.insert(v.begin()+i,a) 在第i个元素后第i+1个元素前插入a;
v.insert(v.begin(), n, a) 将a插入n次到第一个元素前,即位置的0~n-1处
vector<int> v1;
vector<int> v;
v.insert(v.begin(), v1.begin(), v1.end()) 将v1.begin(), v1.end()之间的全部元素插入到v中第一个元素前
push_back()-- 在尾部添加
v.push_back(a) 在尾部添加数据a
3、删除:erase--任意位置
v.erase(v.begin()+i) 删除第i+1个元素
v.erase(v.begin()+m, v.begin()+n) 删除区间[m,n-1]中的元素
pop_back--删除尾部元素
v.pop_back() 删除最后一个数据
5、重定义容器大小:v.resize(num) 重新设置容器的大小
6、判空:v.empty() 判断容器是否为空。
7、交换:v.swap(v1) v向量与v1向量进行交换
四、遍历:
1、使用数组方式遍历:
vector<int>v;
for(int i=0;i<v.size();i++){
cout<<v[i]<<endl;
}
2、使用迭代器遍历:
vector<int>v;
vector<int>::iterator it;
for(it=v.begin();it!=v.end();it++){
cout<<*it<<endl;}
五、排序:
vector使用sort排序可直接排序:用到了头文件#include<algorithm>
sort(v.begin(),v.end()) 默认升序排列,即从小到大。
也可自定义排序:
#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
using namespace std;
//先自定义一个结构体
struct test{
int mem1;
int mem2;
};
//自定义排序函数
bool Comp1( const test &v1, const test &v2)
{
return v1.mem1< v2.mem1;//按mem1升序排列
}
bool Comp2( const test &v1, const test &v2)
{
return v1.mem2< v2.mem2;//按mem2升序排列
}
int main()
{
vector<test>v;
test t1;
t1.mem1=2;t1.mem2=5;
v.push_back(t1);
test t2;
t2.mem1=1;t2.mem2=7;
v.push_back(t2);
test t3;
t3.mem1=4;t3.mem2=2;
v.push_back(t3);
cout<<"按mem1升序排列:"<<endl;
sort(v.begin(),v.end(),Comp1);
vector<test>::iterator it;
for(it=v.begin();it!=v.end();it++){
cout<<it->mem1<<endl;}
cout<<"按mem2升序排列:"<<endl;
sort(v.begin(),v.end(),Comp2);
for(it=v.begin();it!=v.end();it++){
cout<<it->mem2<<endl;}
return 0;
}
上一篇: STL之数值算法
下一篇: 备战NOIP——模板复习1