本章讲解了顺序容器以及他们通用的接口操作。
涉及的容器有:顺序容器vector,list,deque,并提及了stack,queue,priority_queue这三种容器适配器。最常用的容器是vector,支持对元素的快速访问。
主要内容:
1 容器的定义和初始化
2 迭代器的操作。迭代器的元素范围是左闭合区间,即[ )。
3 顺序容器的操作。
插入和删除。
比较.
设置容器大小。
赋值和swap.
4 vector容器的自增长。对于大部分应用,vector容器都是最好的。
因为这种特性使得比起list和deque,vector的增长效率更高。
理论上,vector容器为了实现快速的随机访问,元素以连续的方式存放。当插入新的元素时,由于空间不够可能需要分配新的内存空间(分配新空间,存放原来的和新的元素,撤销旧的空间),这会导致性能很慢。
实际上,为了使容器实现快速的内存分配,实际分配的容量比当前所需的空间多一些。vector容器预留了这些额外的存储区,用于存放新添加的元素。于是不必为新添加的元素重新分配容器。(当每次空间不够时,容器不是只添加了一个元素的空间,而是添加了一大块空间------实际的实现中,常出现增加当前空间的一倍)
5 容器的选用
需要考量的因素:1中间位置插入删除的代价。2元素随机访问的代价。
容器选择的法则:
(1)如果程序随机访问,则选择vector和deque.
(2)如果需要中间位置插入或者删除,使用list。
(3)如果程序在首尾插入或删除,使用deque.
(4)如果读取输入时在中间位置插入元素,然后随机访问。则输入时使用list,然后重排容器使之适合顺序访问,然后复制到vector
6 string类型
在某些方面,string可视为字符容器。因此支持大多数vector容器的操作。
初始化
修改元素
字符串替换
字符(串)查找
比较
7容器适配器(理解上也是容器)
容器适配器是让一种已存在的容器类型采用,采用另一种不同的抽象类型的工作方式实现。如stack就可以让任何一种顺序容器以栈的方式工作。简单说来,容器适配器是由容器构造。用以提供另一种工作方式。
stack建立在三种顺序容器之上,queue(队列?)只能建立在list(链表?)之上,priority_queue只能建立在vector和deque上。默认情况,stack建立在deque之上。