Effective STL 条款1:仔细选择你的容器

条款1:仔细选择你的容器

了解各种容器的实现方法,知道各种容器的内存管理方式、各种操作所对应的底层操作,然后根据需要选择恰当的容器。

对于容器的分类:

标准STL序列容器:vector,string,deque和list
标准STL关联容器:set,multiset,map和multimap
非标准序列容器:slist(单向链表)和rope(重型字符串——不懂)
非标准关联容器:hash_set,hash_multiset,hush_map和hash_multimap
vector == string
vector可作为标准关联容器的替代品
几种标准非STL容器:数组,bitset,valarray,stack,queue和priority_queue

对于不同情况选择不同容器:
如果在任意位置插入元素:选择序列容器,并且最好选用链表list容器。

你是否关心元素在容器中是排序的,如果是,请避免选择哈希容器,即避免使用散列容器。

如果你选择的容器必须使用标准C++的容器那么请除去散列容器、slist、rope。

如果你需要随机访问迭代器,那么限于vector、deque、string,也可能rope。如果是用双向迭代器,那么避免使用slist和散列容器。

插入或删除数据,避免容器内有元素移动,放弃连续内存容器的使用。

数据内存布局需要兼容C,那么只能用vector。

如果你介意使用引用计数技术,那么请避免使用string容器,因为string容器的实现都使用了引用计数。rope也要避免,因为权威的rope也是使用引用计数技术。
对于删除插入操作失败时需要恢复能力,那么就使用基于结点的容器。

你如果想让迭代器、指针、引用的无效次数最小化,那么建议使用节点容器。

其实,情况太多,我们需要做的就是在真正编程过程中,根据不同容器的作用和机理选择最方便为程序服务的对象。

你可能感兴趣的:(STL,如何选择容器类型)