头文件
#include < vector >
简介
- vector向量容器可以像数组一样进行随机访问,大小可以动态变化;
- 特征:相当于可分配拓展的数组,它的随机访问快,在中间插入和删除慢,但在末端插入和删除快。
- 与其它动态序列容器相比,vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。比起lists和forward_lists统一的迭代器和引用更好。
用法
1.定义及创建
vector<int> a //定义一个a的一维数组 类型为int(可以改成其他的类型)`
vector<int> a[100010] //a为一个二维数组
// 创建一个具有n个元素的向量容器对象,每个元素具有指定的初始值
vector<int> a(10,1) // 定义一个a的一维数组,可以储存10个元素,这10个都为1
vector<int> tmp(a.begin(), a.begin()+3); //a的第0个到第2个值初始化tmp
vector<int> a(arr,arr+5); //将arr数组的元素用于初始化a
// 定义一个迭代器
vector<int>::iterator it;
-
2.具体操作
- 语法
v.push_back() //在数组的最后添加一个数据
v.pop_back() //去掉数组的最后一个数据
v.front() //返回第一个元素(栈顶元素)
v.begin() //得到数组头的指针,用迭代器接受
v.end() //得到数组的最后一个单元+1的指针,用迭代器接受
v.clear() // 移除容器中所有数据
v.empty() //判断容器是否为空
v.erase(pos) //删除pos位置的数据
v.erase(beg,end) // 删除[beg,end)区间的数据
v.size() //回容器中实际数据的个数
v.insert(pos,data) //在pos处插入数据
v.at(index); //返回指定index位置处的元素
v.back(); // 返回容器最后一个数据的引用
v.swap(v2); //交换两个容器中的数据
v.count(x) //元素为x的个数
3.算法
/* 遍历元素 */
vector<int>::iterator it;
for(it=v1.begin(); it!=v.end(); it++) cout<<(*it)<<endl;
//或者
for(i=0; i<v.size(); i++) cout<<v[i]<<endl;
/* 元素翻转 */
reverse(vec.begin(), vec.end());
/* 元素排序 */
sort(v.begin(), v.end()); //采用的是从小到大的排序
//
bool cmp (const int& a,const int& b)
{
return a > b;
}
sort(v.begin(),v.end(),cmp);//采用的是从大到小的排序
例子
vector <int> v; //定义vector
vector<int>::iterator it; //定义一个vector迭代器
for(i=4; i<=8; i++) //插入数据
v.push_back(i);
for(it=v.begin(); it!=v.end(); it++) //输出迭代器的值 4 5 6 7 8
cout<<*it<<" ";
for(i=0; i<v.size(); i++) //输出迭代器的值 4 5 6 7 8
cout<<v[i]<<" ";
cout<<v.size()<<endl; //输出元素个数 5
it=it-1;
v.erase(it); //删除最后一个元素
v.push_back(1);
sort(v.begin(), v.end()); //vector排序
for(it=v.begin(); it!=v.end(); it++) //输出vector元素 1 4 5 6 7
cout << *it << " ";
v.insert(v.begin(),100) ; //在pos( v.begin() )位置插入一个elem
cout<<v.front()<<endl; //输出第一个元素 100
v.pop_back(); //去掉最后一个元素
cout << "元素个数:" <<v.size() << endl;//输出元素个数 5( 100 1 4 5 6 )
v.clear(); //vector清空
cout <<"清空后元素个数:" << v.size() << endl; //输出元素个数 0