STL : Standard Template Library, C++ 标准模板库, 封装好了各种接口供我们调用。vector是模板类,是容器的一种,是不定长的数组,可以在尾部增加删除元素,获取数组大小等。容器还有set, map, list, stack, queue等... 我们在算法竞赛中必定会用到。
本文实例代码在https://github.com/zzxzzk115/STL_vector
我们先来看看vector的使用方法:
先引入头文件
#include
当然别忘了
#include
using
namespace
std;
再就是vector对象的创建, vector模板类有很多构造函数,所以在创建对象时也有多种创建方法(在main中创建):
vector<
int> v1;
//创建空vector
vector<
int>
v2(v1);
//从v1拷贝至新vector
vector<
int>
v3(
5);
//创建含5个元素的vector
vector<
int>
v4(
5,
0);
//创建含5个0的vector
为了方便观察我们的vector对象中都有哪些元素,我们可以用迭代器来遍历vector对象,然后打印。为此我们先看begin()和end()的使用:(可以把迭代器理解为指针, begin()指向vector对象的头部,end()指向vector对象的尾部)
void
PrintVector(vector<
int> ve)
{
cout <<
"Vector中的数据为:";
vector<
int>::iterator veIterator;
for (veIterator = ve.
begin(); veIterator < ve.
end(); veIterator++)
{
cout << *veIterator <<
" ";
}
cout << endl;
}
接下来可以愉快的玩耍了,pop_back() push_back() 顾名思义,向尾部增加、向尾部删除嘛, so easy.
在main函数中测试一下:
v1.
push_back(
5);
v1.
push_back(
4);
v1.
push_back(
8);
PrintVector(v1);
结果是
![](http://img.e-com-net.com/image/info8/29f8814e16834dc7afb37b3119aee24a.jpg)
如何访问某一位置的元素呢?用 [index] 或 at(index) 来访问,(index是索引值, 从0开始)
cout << v1[
0] << endl;
cout << v1.
at(
1) << endl;
cout << v1[
2] << endl;
结果是
![](http://img.e-com-net.com/image/info8/7e3a804f4d48421db5682ac579747e69.jpg)
我们还可以访问头尾的数据: back() front()
cout << v1.
back() << endl;
cout << v1.
front() << endl;
结果是
![](http://img.e-com-net.com/image/info8/7dddb3c978554ae9a09360c7c10c59fe.jpg)
max_size()获取最大容纳量,size()获取当前vector对象元素个数
cout <<
"v1中的最大容量为:" << v1.
max_size() << endl;
cout <<
"v1中的元素个数为:" << v1.
size() << endl;
结果是
![](http://img.e-com-net.com/image/info8/390dc79e9c5d4f68bb501d829cebe437.jpg)
empty() 返回1即为空,返回0即不为空
cout <<
"v1是否为空?" << v1.
empty() << endl;
结果是
![](http://img.e-com-net.com/image/info8/508ca0a768644d75a8f21defb84c1050.jpg)
sort()可对vector升序, reverse()可对vector降序
sort(v1.
begin(), v1.
end());
PrintVector(v1);
reverse(v1.
begin(), v1.
end());
PrintVector(v1);
结果是
![](http://img.e-com-net.com/image/info8/93c24c7fc2ec4881bc4d78db9f08ab3c.jpg)
swap()可交换vector数据
swap(v1, v4);
PrintVector(v1);
PrintVector(v4);
结果为
![](http://img.e-com-net.com/image/info8/02bfc1d3ce124c62b0d18a0f04bc7a3f.jpg)
erase()删除元素,insert()插入元素,不过一定要用迭代器
先看erase, insert同理把erase换成insert是一样的
PrintVector(v4);
vector<
int>::iterator vErase = v4.
begin();
vErase = vErase +
1;
v4.
erase(vErase);
PrintVector(v4);
结果是
![](http://img.e-com-net.com/image/info8/c1c79840d7e24906abdb637da30ea749.jpg)
clear()清空vector元素
PrintVector(v4);
v4.
clear();
cout <<
"v4是否为空? " << v4.
empty() << endl;
结果是
![](http://img.e-com-net.com/image/info8/ede7036dd67c4d98b3ba6e80aa00a5ac.jpg)
以下是文档:
http://en.cppreference.com/w/cpp/container/vector