第九章 顺序容器
顺序容器概述
- string 和 vector 将元素保存在连续的内存空间中,随机访问。
- list 、forward_list 是链表,插入删除操作 O(1) ,顺序访问,额外内存开销也很大。
- deque 支持快速随机访问,首位删除插入效率高。
- array 是固定大小的数组,array不支持添加和删除元素以及改变容器大小的操作。
- forward_ list 的设计目标是达到与最好的手写的单向链表数据结构相当的性能。因此,forward_list 没有 size() 操作。
容器库概览
容器操作
容器初始化
- 只有顺序容器的构造函数才接受大小参数,关联容器并不支持。
- 默认构造的 array 是非空的,其他容器默认构造的是空的。
- 与其他容器一样, array 也要求初始值的类型必须与要创建的容器类型相同。此外, array 还要求元素类型和大小也都一样。
容器赋值运算
swap : 除array外,swap不对任何元素进行拷贝、删除或插入操作,只是交换其数据结构,但是在array中会真正交换他们的元素。
emplace
调用 emplace 成员函数时,将参数传递给元素类型的构造函数。emplace 成员使用这些参数在容器管理的内存空间中直接构造元素。
访问元素
删除元素
forward_list : 单链表,不能直接获取前驱,所以无前插操作,不支持 back() , size() , pop_back() 等操作。了解底层结构就能弄清楚各种容器的操作。
**向容器中添加元素和从容器中删除元素的操作可能会使指向容器元素的指针、引用或迭代器失效。一个失效的指针、引用或迭代器将不再表示任何元素。**根据结构的不同插入删除的影响也不一样,待到深入了解源码后应该就知道了。