CPP_Primer CH6--抽象容器

Ponit1:

顺序容器:拥有有单一类型元素组成的一个有序集合:

1 Vector

2 List

3 Deque 类似Vector,但是对首元素删除,插入有特殊支持。

 

关联容器:

MAP  描述关键字(KEY)到有效数据(VALUE)映射。

SET 描述关键字的集合,有效支持关键字是否存在。

 

Point2:

如何选择Vectro还是list?

1 如果需要随机访问一个容器, 选择前者。

2 如果已知要存储的元素个数,选择前者。

3 如果不只是在容器两端插入和删除元素,选择后者。

4 如果我们不需要再删除插入首元素,则Vector比Deque好。

 

理论上对于动态增长的容器,理论上List增长比Vector效率高,但是实际并非如此,过程不多说,结论如下:

1 对于小对象,使用vector

2 对于大对象,使用List

 

Point3:

todo:

验证一下,如果定义一个vector容器的的数量为24的话,后续一直增加超过24,是否会报错?

 

每个容器支持一组关系操作符,比如> < 等,比较标准类似string

 

Point3:

迭代器:

iterator 对顺序或者关联容器的每个元素进行连续访问,每种容器都提供

begin() 返回一个iterator指向容器第一个元素。

end()返回指向interator指向容器最后一个元素的下一个位置

 

todo:

迭代器的算术计算只适用于vector和deque,不能用于list,因为list是不连续的。

比如iter+=2,对于vector向后挪两个元素的位置,不能用list。

疑问:list容器的++操作符是否支持?

 

Ponit4:

我们可以把一个容器赋值给另一个,

比如slist1 = slist2,底层的操作时先释放slist1所有资源,然后再申请slist相同的资源,进行拷贝。

 

Point5:

泛型算法思想:

顺序容器的基本操作:插入,删除,赋值和对换,提供比较操作符。

毫无疑问,这个是一个相当小的接口,省略了find sort merge等基本操作。

泛型算法的思想是把所有容器的功能操作抽取出来,形成一个通用算法集合,它能应用到全部容器类型以及内置数组类型上。

而不是让所有容器都实现一把这些算法。

todo:标准C++库的使用说明,比如string的所有操作。

 

Point6:

Map容器:提供一个“key/Value”对,建用来索引map,而值用来存储和索引数据。

个人理解MAP容器扩展了数据下表的数据类型,之前只能是int,后续可以使string等

 

Point7:

高性能的插入MAP方法:

普通方法:

map<string,int> word_count;

word_count[string("apple")] = 1;

 

高性能方法:

word_count.insert(map<string ,int>::value_type(string("APPLE"),1));

map容器提供一个VALUE_TYPE方法构造一个方法对,直接插入。

 

通过下标操作插入容器的时候,首先是关联的值首先会调用默认的构造函数赋为初始值,然后再调用拷贝构造函数赋为新值。

个人理解C++提高效率的一个方法就是,不要调用无用的默认初始构造函数,比如上述插入方法:

又如下述的sting初始化,初始化2 优于初始化1

初始化1

string Name;

Name = string(“good day”);

初始化2

string Name = string(“good day”);

 

Point8:

Map危险做法:

任何一个不存在的key的下标操作和引起插入一个实例,其中的Value会初始为默认值。

判断一个Key是否存在不能使用上述下标操作,而使用如下方法:

1 count 2 find

 

Point9 :

Set容器:提供一些关键字的组合,Key的组合,提供某关键字是否存在查询:

提供insert find count iterator迭代等操作。

 

 Point10:

 

Point11:

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值