条款1:仔细选择你的容器
标准stl序列容器:vector.string.deque与list. 标准stl关联容器:set.multiset.map与multimap. 非标准序列容器slist与rope.slist是一个单向链表,rope本质上是一个重型字符串.(“绳子(rope)”是重型的“线(string)”.明白了吗?)你可以找到一个关于这些非标准(但常见的)容器的概览在条款50. 非标准关联容器hash_set.hash_multiset.hash_map与hash_multimap.我在条款25检验了这些可以广泛获得的基于散列表的容器与标准关联容器的不同点. vector<char>可以作为string的替代品.条款13描述了这个替代品可能会有意义的情况. vector作为标准关联容器的替代品.就像条款23所说的,有时候vector可以在时间与空间上都表现得比标准关联容器好. 几种标准非stl容器,包括数组.bitset.valarray.stack.queue与priority_queue.因为它们是非stl容器,所以在本书中关于它们我说得很少,虽然条款16提到了数组比stl容器更有优势的一种情况,而条款18揭示了为什么bitset可能比vector<bool>要好.值得注意的是,数组可以与stl算法配合,因为指针可以当作数组的迭代器使用.这是所有的选项,而且可以考虑的范围与可以在它们之间的选择一样丰富.不走运的是,stl的大多数讨论只限于容器世界的一个很窄的视野,忽略了很多关于选择适当容器的问题.就连标准都介入了这个行动,提供了以下的在vector.deque与list之间作选择的指导方案: 【程序编程相关:用SqlDataAdapter更新数据库】
你知道c++中有很多你可以支配的容器,但是你意识到有多少吗?要确定你没有忽略你的选项,这里有一个快速回顾. 【推荐阅读:模板类的练习——队列】
如果你主要关心的是算法复杂度,我想这个方案是有理由的建议,但需要关心更多东西. 【扩展信息:获取Access中所有表和所有表字段属性】
vector.list与deque提供给程序员不同的复杂度,因此应该这么用:vector是一种可以默认使用的序列类型,当很频繁地对序列中部进行插入与删除时应该用list,当大部分插入与删除发生在序列的头或尾时可以选择deque这种数据结构.
... 下一页