n 标准STL关联式容器(associative containers),set, multiset, map, and multimap.
n 非标准序列式容器(nonstandard sequence containers) slist 和 rope。slist 是一个单向链表,rope从本质上讲是一个重型的string。(一个”rope”就是一个重型”string”。明白了吗?)(有一个比喻,可以更好的理解rope与string之间的区别,rope是粗绳,string是细线。) 你可以在第50条找到这些非标准容器的简短概览(这些容器一般来讲都是可用的)。(译注:这里所说的“一般来讲都是可用的”是指大多数stl标准库都会实现这些非标准容器。)
n 非标准关联式容器(nonstandard associative containers)hash_set, hash_multiset, hash_map, hash_multimap。我会在条款25仔细讲解这些符合标准关联式容器的基于散列表的高度可用的各种类型(容器)。
n String 的替代物vector<char>。条款13描述了合理替换的条件。
n vector 作为标准关联式容器的替代物。在条款13中你可以看到,在时间和空间方面vector有时比标准关联式容器要做得好。
n 几种标准的非STL容器,包括arrays, bitset, valarray, stack, queue, 和priority_queue。因为这些是非STL容器,所以除了在条款16提到有一种情况使用数组要优于STL容器以及在条款18解释为什么bitset可能要好于vector<bool>,本书几乎没有讨论它们。同样,记住数组可以用于STL算法(algorithms),因为指针可以被当作数组的iterators。
这就是所有的选择了,考虑了各种情况,你选择容器时就应该从它们当中抽取。不幸的是,对大多数STL的讨论仅限于容器世界(world of containers)极小的一部分,而忽略了许多关于选择最合适容器的主题。即使标准本身,也只提供了下列在vector, deque和list中进行选择的指导:
vector, list 和 deque 为程序员提供不同的复杂度平衡,应权衡使用。vector 是序列式容器,作为缺省使用。List应当用于频繁在序列中部进行插入和删除操作的情况。当大多数插入和删除操作发生在序列的头和尾时请选择deque。
如果你主要的关心是算法复杂性,我认为这个章程(constitutes)是合理的建议,但还有更多的东西需要关心。
现在,我们来考虑重要的和容器相关的主题,这个主题能更好的说明算法复杂性,但是首先我要介绍一种容器分类的方法,这种方法应当被经常的讨论,但是却没有(真理总是掌握在少数人手中