本标题有严重的标题党倾向!
文章目录
vector是什么?
vector
是STL中常用的容器,中文名是向量容器
,可以理解成一个可以添加或删除元素的动态数组
(P.S.自己使用类实现一个也不难)
需要#include<vector>
vector中的常见操作有什么?
初始化vector对象
vector<int> myVector;
如果想要指定初始长度
vector<int> myVector(20);
如果想要指定长度并初始化
int len;
int primal;
vector<int> myVector(len,primal);
添加元素
尾部添加
myVector.push_back(10) //会自动给vector添加内存
随意添加
如果myVector通过初始化
vector<int> myVector(20);
或者调用 reserve()
myVector.reserve(20);
可对范围内的元素进行修改
myVector[12]=2333;
访问元素
访问范围内任意值
myVector[n];
访问首尾
myVector.front();
myVector.back();
起始地址和终止地址
myVector.start();
myVector.end();
值得注意的是end()
是最后一个元素的下一个元素的地址,也就是说*end()
无意义。
获得长度
myVector.size();
优雅的高端操作
遍历vector
方案一
for(int i=0;i<myVector.size();i++)
{
cout<<myVector[i]<<" ";
}
方案二
for (auto i = myVector.begin(); i !=myVector.end() ; i++)
{
cout << *i << " ";
}
方案三
for (auto i : myVector)
{
cout << i<<" ";
}
以下均需要借助<algorithm>
库
删除指定元素
#include <algorithm>
#define vectorMove(V,x) (V.erase(remove(V.begin(), V.end(),x), V.end()))
是的,没错,毫无疑问,仅需这一行
解释一下:
iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);
vector.erase()
的作用是删除某个位置position
或一段区域[begin, end)左闭右开
中的元素,其返回值是被删除元素的下一个元素的地址。
template <class ForwardIterator, class T>
ForwardIterator remove (ForwardIterator first, ForwardIterator last, const T& val);
作用是将first,end
范围内,值为val
的所有数移动到迭代器的末尾,视为无效数据,但不改变迭代器的size()
,返回值为第一个无效数据的位置。
因此我们可以解释如何使用上面的一行代码优雅地删除指定元素了。
先使用remove()
将值为x
的数据移植末尾,并且返回第一个无效数据的位置,使用erase
将所有无效数据删除。
排序
正序
#include<algorithm>
sort(myVector.begin(),myVector.end());
逆序
sort(myVector.rbegin(),myVector.rend());
查找某一元素位置
find(myVector.begin(),myVector.end(),x);
返回第一个x所在的地址