[1 容器] 1. 慎重选择容器类型

本章讲述适用于STL容器的准则,随后几章就特定类型的容器展开论述。

注意:auto_ptr已经弃用,可用shared_ptr或unique_ptr来替换。

1. 慎重选择容器类型

C++容器分类如下:

1 标准STL序列容器

vector,string,deque和list。

频繁在序列中间插入和删除操作,应使用list。

频繁在序列头部,尾部插入和删除操作,应使用deque。

2 标准STL关联容器

set,multiset,map和multimap。

3 非标准序列容器

slist,rope。第50条

4 非标准关联容器

hash_set,hash_multiset,hash_map和hash_multimap等散列容器。第25条。

5 vector<char>作为string的替代

第13条。

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

第23条。

7 几种标准的非STL容器

数组,bitset,valarray,stack,queue和priority_queue。

第16条。第18条。

引入对STL容器的一种分类方法:

1 连续内存容器

它的元素存放在一块或多块动态分配的内存中,每块内存中存有多个元素,当有新元素插入或已有元素删除时,同一内存块的其他元素向后或向前移动。提供随机访问迭代器。

标准的连续内存容器有vector,string和deque。非标准的连续内存容器有rope。

2 基于节点的容器

每一个动态分配的内存块中只存放一个元素。容器中元素的插入或删除只影响到指向节点的指针,不影响节点本省的内容。提供双向迭代器(除了slist和散列容器)。

基于节点的容器有list,slist,标准的关联容器(实现方式平衡树),非标准的关联容器。

总结出以下建议,用于选择容器:

1 需要在容器的任意位置插入元素

选择序列容器

2 容器中的元素是排序的

避免选择散列容器

3 插入或删除元素,避免移动容器中原来的元素

避免选择了连续内存容器

4 元素的查找速度很关键

散列容器 > 排序的vector > 标准的关联容器

5 使用了引用计数的容器

string,rope

6 使迭代器,指针和引用变为无效次数最少的容器

选择基于节点的容器,这类容器的插入和删除操作不会使迭代器,指针和引用无效,除非它指向了一个正在删除的元素。

避免选择连续内存容器,这类容器的插入和删除一般会使指向该容器的迭代器,指针和引用变为无效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值