容器
容器:用来放东西的东西。在C++里,所谓容器是指用来存储一堆数据的类型。
所有容器都有迭代器,和size(), empty(), clear()用法。
vector
vector的的下标从0开始。
vector很像数组。
1. 定义
头文件:
#include <vector>
下图是一个vector类型的v
v[0] | v[1] | v[2] | v[3] | v[4] | v[5] |
1 | 1 | 4 | 5 | 1 | 4 |
以上表格可以用以下代码定义
vector<int> v={1, 1, 4, 5, 1, 4};
我们可以定义含有指定数量的相同值的vector:
vector<int> v(6, 1);//含有6个1的vector
也可以不定初始值,这样每个元素将被赋予此类元素的缺省值
vector<int> v(6);//含有6个0的vector
注意:不能访问vector中的空元素。
vector[114514] = 1919810;//这个是错的
2. 遍历
遍历vector数组有两种方式:
第一种:普通遍历
for(int i = 0; i < v.size(); i++)
cout << v[i] << endl;
第二种:增强迭代器遍历
for(auto i : v)
cout << i << endl;//这种方法需要使用-std=c++11或更新的语言标准
若v.size()==0,则v中没有元素,v是空的。
3. 修改数据
使用push_back()函数可以往vector里面添加一个元素,添加后的元素在vector的最后。
v.push_back(1);//往v的尾部添加元素1
使用pop_back()函数可以把vector中的最后一个元素删除。
v.pop_back();//把v的尾部元素删除掉
4. 排序
v.begin():指向第一个元素
v.end():指向最后一个元素的后面
v.end()-v.begin():元素个数(数值等于v.size())
v.rend(); 反向迭代器,指向最后一个元素
v.rbegin(); 反向迭代器,指向第一个元素的前面
排序头文件:
#include <algorithm>
排序代码:
sort(v.begin(), v.end());//全部元素都排序(从小到大)
sort(v.begin(), v.begin() + 4);//只排序第1个到第5个元素
sort(v.rbegin(), v.rend());//从大到小排序
v[0] | v[1] | v[2] | v[3] | v[4] | v[5] | ||
空 | 1 | 1 | 4 | 5 | 1 | 4 | 空 |
v.rend() | v.begin() | v.begin()+4 | v.rbegin() | v.end() |
方法二:
vector<int>::iterator vstart = v.begin();//或auto vstart=v.begin();(注释中的方法只有c++11或以上版本才能使用)
vector<int>::iterator vend = v.end();//或auto vend=v.end();(注释中的方法只有c++11或以上版本才能使用)
sort(vstart, vend);
5. vector常用的用法
- .size() 返回长度
- .push_back() 在尾部插入元素
- .pop_back() 删除尾部元素
- .empty() 为空返回1,否则返回0
- .clear() 清空
- v[下标] 使用下标访问
- .front() 指向第一个元素
- .end() 指向最后一个元素的后面
- .rbegin() 指向第一个元素的前面
- .rend() 指向最后一个元素