介绍:
vector : 与数组类似,而不同之处是其大小是动态的,它不会造成内存的浪费和越界。随机访问和在末尾处的插入和删除操作比较快,虽然支持中间的插入和删除,但不怎么快,有机会专门写一篇其各项操作与数组之间速度比较。
用法:
1.头文件
#include<vector>
2.定义方式
vector<int>vec1; //定义一个int类型的vector vector<string>vec2; //定义一个string类的vector vector<node>vec3; //定义一个结构体类型的vector
3.迭代器
与数组进行 for 循环时用到的下标 i 类似,但比那个复杂,所要注意的也更多。
vector<int>::iterator it; //定义一个迭代器
4.基本操作
例子(输入输出):
#include<vector>
#include<iostream>
using namespace std;
int main()
{
vector<int>vec;
vector<int>::iterator it;
int n,temp;
cin>>n;
for(int i=0;i<n;++i)
{
cin>>temp;
vec.push_back(temp);
}
for(it=vec.begin();it!=vec.end();++it)
{
cout<<*it<<endl;
}
for(int i=0;i<n;++i)
{
cout<<vec[i]<<endl;
}
return 0;
}
常用函数总结
- 末尾添加元素: vec.push_back(data);
- 末尾删除元素: vec.pop_back();
- 任意位置插入元素: vec.insert(it,data);
- 任意位置删除元素: vec.erase(it);
- 删除[it_begin,it_end)的元素:vec.erase(it_begin,it_end);
- 清空vector中的元素:vec.clear();
- 开始指针:vec.begin();
- 末尾指针:vec.end(); //指向最后一个元素的下一个位置
- 返回第一个元素:vec.front();
- 判断vector是否为空:vec.empty();//空1,非空0
- 返回容器中的个数:vec.size();
- 元素翻转
#include <algorithm> reverse(vec.begin(), vec.end());
- 元素排序
#include <algorithm>
sort(vec.begin(), vec.end()); //采用的是从小到大的排序
//如果想从大到小排序,可以采用上面反转函数,也可以采用下面方法:
bool Comp(const int& a, const int& b)
{
return a > b;
}
sort(vec.begin(), vec.end(), Comp);
参考资料:
https://www.cnblogs.com/zhonghuasong/p/5975979.html
http://www.cnblogs.com/aiguona/p/7228364.html