《C++ Primer》读书笔记——第九章_顺序容器

《C++ Primer》读书笔记——第九章_顺序容器

标签(空格分隔): 未分类

一个容器就是一些特定类型对象的集合。顺序容器(sequential container)为程序员提供了控制元素存储和访问顺序的能力。这种顺序不依赖于元素的值,而是与元素加入容器时的位置相对应。与之相对的是11章的有序和无序关联容器,它们根据关键字的值来存储元素。

与容器对应的是适配器,他们为容器操作定义了不同的接口,来与容器类型适配。

9.1 顺序容器概述
所有顺序容器都提供了快速顺序访问元素的能力。

vector 可变大小数组。支持快速随机访问,在尾部之外的位置插入或删除元素可能很慢。

deque 双端队列。支持快速随机访问。在头尾位置插入/删除速度很快。
list 双向链表。只支持双向顺序访问。在list中任何位置插入/删除都很快
forward_list 单向链表。只支持单项顺序访问。在链表任何位置进行插入/删除操作都很快。
array 固定大小数组。支持快速随机访问。不能添加或删除元素。
string 与vector相似的容器,但专门用于保存字符。随机访问快。在尾部插入/删除速度快。

除了array外,其他容器都提供高效、灵活的内存管理。
string和vector将元素保存在连续的内存空间中。因为连续,所以下标访问非常快。但在中间插入、删除较慢(O(n))。有时添加一个元素还可能需要分配的额外空间,这种情况所有元素必须移动到新的存储空间中
forward_list和array是新C++标准增加的类型。array比内置数组更安全。forward_list没有size()操作。新标准库的容器比旧版本的快得多。详见P470.

1.一般用vector。
2.如果程序有很多小元素,且空间的额外开销很重要,则不要用list或forward_list。
3.要随机访问元素用vector或deque。
4.如果要在中间插入元素,应用list或forward_list。
5.如果要在头尾插入元素。但不会在中间插入元素,用deque。
6.如果程序只有在读取输入的时候才需要在容器中间位置插入元素,随后需要随机访问元素。如果确实需要,则考虑在输入阶段用list,一旦输入完成,将list中的元素拷贝到一个vector中。

forward_list不支持递减操作。因为是单向链表。
一个迭代器范围由一对迭代器表示,begin和end或者first和last表示。但end和last从来不指向范围中最后一个元素,而是指向尾元素之后的位置。这种元素范围成为【左闭合区间】。数学描述为[first, last), [begin, end)。

你可能感兴趣的:(《C++,Primer》读书笔记)