STL学习——顺序容器
我以vector为例,总结一下STL顺序容器的基本使用。
vector是顺序容器,它在很多方面类似于我们通常使用的数组。但是它比数组具有很多很好的特性。它使用安全,具有数组所不具备的自增长的特性,使得vector在现代软件设计中占据重要地位。
本讲分五个部分,分别是初始化、迭代器、容器访问、容器操作和其他内容。
说明:
1、本文均只涉及vector常用的知识,不求全面只求常用。^-^
2、本文如果没有特别声明,则所用的容器为vector<int> nVec;
3、版权所有!
一、初始化
vector常用的初始化方法有:
1、创建空容器
vector<int> nVec;
2、创建在迭代器范围内的容器
vector<int> nVec(iBegin, iEnd);
3、创建n个元素为c的容器
vector<int> nVec(n, c);
4、创建有n个值初始化的容器
vector<int> nVec(n);
我最近想到一个问题,vector好像不能像数组一样批量初始化。数组可以这样初始化:
int a[] = {1, 2, 3, 4, 5};
但是vector不能类似的用vector<int> nVec = {1, 2, 3, 4, 5};
作为一个优秀的容器,难道vecotr就不具备初始化的能力吗?
答案是可以的,我们可以这样:
int a[] = {1, 2, 3, 4, 5}; // 先批量初始化一个数组
vector<int> nVec(a, a + 5); // 利用迭代器初始化
这样我们就能批量初始化容器了。需要注意的是,这里的a+5处于a的界外。就像是vector的函数end()一样,它返回的是最后一个元素后的位置。这里也需要这样。
二、迭代器
迭代器的本质就是指针。vector的迭代器的获取是使用begin()和end()获取的。
迭代器支持的操作有++, --, +, -, >, <, >=, <=, ==, !=以及*操作。
迭代器包括iterator和const_ iterator。其中后者是只读性迭代器。
三、容器访问
首先说明一点,容器访问设计的操作是不修改容器内容的操作。
vector的容器访问有取下标操作[]、迭代器的解引用*、begin()、end()、size()、empty()、back()、front()、at()等。
解释一下,size函数返回容器中元素的个数,empty函数返回容器是否为空的布尔值,back函数返回容器最后一个元素的引用,front返回容器第一个元素的引用,at返回下标为函数参数的元素的引用。貌似back()、front()、at()不应该放在这里,因为它们返回的都是引用值。
begin()、end()返回值的类型是vector<int>::iterator;
size()返回值的类型是vector<int>::size_type;
back()、front()、at()返回值的类型是vector<int>::reference。
四、容器操作
插入元素:insert(),push_back(),push_front()
删除元素:erase(),pop_back(),pop_front()
清空容器:clear()
调整长度:resize()
五、其他
vector中包括的类型别名包括
size_type, iterator, const_iterator, reverse_iterator, const_reserve_tierator, difference_type, value_type, reference, const_reference。
以后将继续补充,就算是我学习STL的笔记吧呵呵。欢迎大家批判!