1、容器的容器vector< vector<string> > lines;必须用空格隔开两个相邻的>符号,以示这是两个分开的符号,否则,系统会认为>>是单个符号,为右移操作符,并结果导致编译时错误。

2、使用迭代器编写程序时,必须留意哪些操作会使迭代器失效。使用无效迭代器将会导致严重的运行时错误。

3、容器定义的类型别名:

size_type 无符号整型,足以存储此容器类型的最大可能容器长度

iterator 此容器类型的迭代器

const_iterator 元素的只读迭代器类型

reverse_iterator 按逆序寻址元素的迭代器

const_reverse_iterator 元素的只读(不能写)逆序迭代器

difference_type 足够存储两个迭代器差值的有符号整型,可为负数

value_type 元素类型

reference 元素的左值类型,是value_type&的同义词

const_referenct 元素的常量左值类型,等效于const value_type&

4、在顺序容器中添加元素:

push_back

push_front 只适用于list和deque容器类型

insert

5、访问元素:

c.back()

c.front()

c[n] 只适用于vector和deque容器

c.at(n) 只适用于vector和deque容器

6、删除元素:

erase

clear

pop_back

pop_front 只适用于list或deque容器

7、顺序容器的赋值操作:

c1 = c2 删除容器c1的所有元素,然后将c2的元素复制给c1。c1和c2的类型(包括容器类型和元素类型)必须相同

c1.swap(c2) 交换内容:调用完该函数后,c1中存放的是c2原来的元素,c2中存放的则是c1原来的元素。c1和c2的类型必须相同。该函数的执行速度通常要比将c2的元素复制到c1的操作快

c.assign(b, e) 重新设置c的元素:将迭代器b和e标记的范围内所有的元素复制到c中。b和e必须不是指向c中元素的迭代器。

c.assign(n, t) 将容器c重新设置为存储n个值为t的元素

如果在不同(或相同)类型的容器内,元素类型不相同但是相互兼容,则其赋值运算必须使用assign函数。例如,可通过assign操作实现将vector容器中一段char*类型的元素赋给string类型的list容器。

由于assign操作首先删除容器中原来存储的所有元素,因此,传递给assign函数的迭代器不能指向调用该函数的容器内元素。

8、vector类提供了两个成员函数:capacity和reserve,使程序员可与vector容器内存分贝的实现部分交互工作。capacity操作获取容器需要分配更多的存储空间之前能够存储的元素总数,而reserve操作则告诉vector容器应该预留多少个元素的存储空间。

9、本质上,适配器是使一事物的行为类似于另一事物的行为的一种机制。容器适配器让一种已存在的容器类型采用另一种不同的抽象类型的工作方式实现。例如,stack(栈)适配器可使任何一种顺序容器以栈的方式工作。

默认的stack和queue都基于deque容器实现,而priority_queue则在vector容器上实现。在创建适配器时,通过将一个顺序容器指定为适配器的第二个类型实参,可覆盖其关联的基础容器类型:

stack< string, vector<string> > str_stk;    // 使stack基于vector实现

对于给定的适配器,其关联的容器必须满足一定的约束条件。stack适配器所关联的基础容器可以是任意一种顺序容器类型。因此,stack栈可以建立在vector、list或者deque容器之上。而queue适配器要求其关联的基础容器必须提供push_front运算,因此只能建立在list或者deque容器上,而不能建立在vector容器上。priority_queue适配器要求提供随机访问功能,因此可建立在vector或deque容器上,但不能建立在list容器上。

10、所有适配器都定义了两个构造函数:默认构造函数用于创建空对象,而带一个容器参数的构造函数将参数容器的副本作为其基础值。例如,架设deq是deque<int>类型的容器,则可用deq初始化一个新的栈,如下所示:

stack<int> stk(deq);