Effective stl 第一章 容器

本文介绍了C++标准模板库(STL)中的各种容器类型及其适用场景,包括vector、list、deque等序列容器,以及set、map等关联容器。文章还讨论了非STL容器的选择依据,帮助开发者根据具体需求合理选用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第1条:慎重选择容器类型

标准STL序列容器:vector, string, deque, list

标准STL关联容器:set, multiset, map, multimap

非标准序列容器slist和rope。slist单项链表,rope本质上是一”重型“string

非标准关联容器hash_set、hash_multiset、hash_map和hash_multimap

vector<char>作为string的替代

vector作为标准关联容器的替代

几种标准的非STL容器,包括数组、bitset、valarray、stack、queue、priority_queue

数组也可以被用于STL算法,因为指针可以被用作数组的迭代器


vector是默认应使用的序列类型;

当需要频繁的在序列中间做插入和删除操作时,应使用list;

当大多数插入和删除操作发生在序列的头部和尾部时,选择deque


连续内存容器有vector、string、rope

基于节点的容器有:list、slist, 关联容器


参考标准:

1、是否需要在容器的任意位置插入新元素?如果需要,选择序列容器,关联容器是不行的

2、是否关心容器中的元素使排序的?如果不关心,散列容器可以考虑,否则,避免散列容器

3、容器必须是标准C++中的一部分吗?如果是,则排除了散列容器、slist和rope

4、需要哪种类型的迭代器?随机访问迭代器:vector、deque、string,或rope,  双向迭代器:避免slist和散列容器

5、当发生元素的插入或删除操作时,避免移动容器中原来的元素是否很重要?如果是,则避免连续内存的容器

6、容器中的数据布局是否需要和C兼容?如果需要,只能选择vector

7、元素的查找速度是否是关键的考虑因素?如果是,则考虑散列容器,排序的vector,标准关联容器

8、如果容器内部使用了引用计数技术,是否介意?如果是,则避免使用string,因为许多string的实现都使用了引用计数,rope也需要避免,因为权威的rope实现是基于引用计数的,可以考虑vector<char>

9、对插入和删除操作,需要事务语义吗?选择基于结点的容器,如果对多个元素的插入操作需要,则选择list,因为在标准容器中,只有list对多个元素的插入操作提供了事务语义。

10、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值