简介
vector,array,forward_list应该是容器中较简单的类型。下面对部分顺序容器类型进行一个简单的总结。
vector是可变大小数组,元素是连续存储的,因此支持随机访问。在尾部之外的其他位置插入删除元素很慢,因为需要进行元素的移动操作。array是固定大小的容器,编译期间就可以确定大小。同样是顺序存储支持快速随机访问。forward_list和list相似,只不过前者是单向,后者是双向,等下文章会说forward_list的结构。两者都不是顺序存储的,因此不支持随机访问的操作,但是优点是插入删除的速度很快。deque,string在后面的文章继续说明。
vector
vector定义的代码如下:
|
|
定义比较简单,很好理解。其中要注意的是其迭代器是指针。每个操作都进行了相应的定义,注意大多数容器是前闭后开的区间,因此注意back()函数的定义,end()返回的是尾后迭代器,因此要减1。
vector有一个很重要的函数就是push_back()。下面是push_back的源代码和相应的注释。
|
|
这里有一个设计就是在push_back()函数和insert_aux函数中都进行了是否还有存储空间的判断,原因是不仅push_back函数会用到insert_aux函数,其他函数也可能用到该函数,所以这样增加了该函数的通用性。
array
array 和 vector 一样都支持随机访问,但是其大小是固定的。下面看看array的定义:
|
|
其中iterator也是指针,不是定义的一个复杂的模板类。
forward_list
forward_list是单向链表,应该说实现上和list很像。下面看forward_list的模型图。
在forward_list中有两个函数可以注意下
|
|
forward_list中有一个伪头节点蓝色标记的,end()返回的实际上是一个空的节点。
声明
若有错误,欢迎讨论。严禁抄袭,仅用于学习。