C++ STL 之 不定长数组 vector

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);

结果是


如何访问某一位置的元素呢?用 [index] 或 at(index) 来访问,(index是索引值, 从0开始)

cout << v1[ 0] << endl;
cout << v1. at( 1) << endl;
cout << v1[ 2] << endl;

结果是


我们还可以访问头尾的数据: back() front()

cout << v1. back() << endl;
cout << v1. front() << endl;

结果是


max_size()获取最大容纳量,size()获取当前vector对象元素个数

cout << "v1中的最大容量为:" << v1. max_size() << endl;
cout << "v1中的元素个数为:" << v1. size() << endl;

结果是


empty() 返回1即为空,返回0即不为空

cout << "v1是否为空?" << v1. empty() << endl;

结果是


sort()可对vector升序, reverse()可对vector降序

sort(v1. begin(), v1. end());
PrintVector(v1);
reverse(v1. begin(), v1. end());
PrintVector(v1);

结果是


swap()可交换vector数据

swap(v1, v4);
PrintVector(v1);
PrintVector(v4);

结果为


erase()删除元素,insert()插入元素,不过一定要用迭代器

先看erase, insert同理把erase换成insert是一样的

PrintVector(v4);
vector< int>::iterator vErase = v4. begin();
vErase = vErase + 1;
v4. erase(vErase);
PrintVector(v4);

结果是



clear()清空vector元素

PrintVector(v4);
v4. clear();
cout << "v4是否为空? " << v4. empty() << endl;

结果是


以下是文档:

http://en.cppreference.com/w/cpp/container/vector

   

你可能感兴趣的:(C/C++,数据结构)