C++ STL (2) vector 的简单用法
C++ STL (2) vector 的简单用法
-
vector的作用
它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。在C++标准模板库中,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。 -
vector的优点
vector 容器与数组相比其优点,在于它能够根据需要随时自动调整自身的大小以便容下所要放入的元素。 -
特别注意
1、如果要表示的向量长度较长(需要为向量内部保存很多数),容易导致内存泄漏,而且效率会很低;
2、vector的元素不仅仅可以是int,double,string,还可以是结构体,但是要注意:结构体要定义为全局的,否则会出错。
3、Vector作为函数的参数或者返回值时, 其中的“&”绝对不能少。
double Distance(vector<int>&a, vector<int>&b)
-
头文件
#include<vector>
-
vector标准库
创建vector对象:vector<int> c
在尾部加入一个数据:c.push_back(elem)
删除最后一个数据:c.pop_back()
传回最后一个数据,不检查这个数据是否存在:c.back()
传回迭代器中的第一个数据地址:c.begin()
返回容器中数据个数:c.capacity()
移除容器中所有数据:c.clear()
判断容器是否为空:c.empty()
指向迭代器中末端元素的下一个,指向一个不存在元素:c.end()
删除pos位置的数据,传回下一个数据的位置:c.erase(pos)
删除[beg,end)区间的数据,传回下一个数据的位置:c.erase(beg,end)
传回第一个数据:c.front()
在pos位置插入一个elem拷贝,传回新数据位置:c.insert(pos,elem)
在pos位置插入n个elem数据。无返回值:c.insert(pos,n,elem)
在pos位置插入在[beg,end)区间的数据。无返回值:c.insert(pos,beg,end)
返回容器中最大数据的数量:c.max_size()
传回一个逆向队列的第一个数据:c.rbegin()
传回一个逆向队列的最后一个数据的下一个位置:c.rend()
重新指定队列的长度:c.resize(num)
保留适当的容量:c.reserve()
返回容器中实际数据的个数:c.size()
将c1和c2元素互换:c1.swap(c2);swap(c1,c2)
使用迭代器访问元素:
vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;
-
排序和翻转
使用reverse将元素翻转:需要头文件**#include<algorithm>(reverse(vec.begin(),vec.end()) Ps.逆序排列)
使用sort排序:需要头文件#include<algorithm>:(sort(vec.begin(),vec.end()) Ps.默认是按升序排列,即从小到大,可通过重写排序比较函数按照降序比较)
bool Comp(const int &a,const int &b)//重写比较函数
{
return a>b;
}
sort(vec.begin(),vec.end(),Comp);//调用时实现降序排序
例题:HackerRank - vector-sort
#include<iostream>
#include<set>
#include<vector>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int n,a;
vector<int>s;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a;
s.push_back(a);
}
sort(s.begin(),s.end());
for(int i=0;i<n;i++)
cout<<s[i]<<' ';
return 0;
}
例题:HackerRank - vector-erase
#include<iostream>
#include<map>
#include<string>
#include<vector>
using namespace std;
int main()
{
int m,n,a,x,y;
vector<int>v;
cin>>m;
for(int i=0;i<m;i++)
{
cin>>a;
v.push_back(a);
}
cin>>n;
v.erase(v.begin()+n-1);
cin>>x>>y;
v.erase(v.begin()+x-1,v.begin()+y-1);
cout<<v.size()<<endl;
for(int i=0;i<v.size();i++)
cout<<v[i]<<' ';
return 0;
}
上一篇: C++中vector和set简单用法