-
容器共同能力和操作
-
所有容器提供的都是value语义,对元素的安插实施的都是copy或move。每个元素都需要能够copy或move。要么元素就是指针或指向对象的pointer object。
-
元素在容器内有其特定的顺序。Unordered也是(不调用增加或删除元素的操作)
-
初始化P255对于array的特例
一般使用初始化语法,也就是大括号,否则用小括号将实参括起来
用move可显著提升效率
.begin() .end() .cbegin() .cend()都是返回iterator。对C-stylearray 用std::begin()
-
赋值
元容器所有元素复制到目标容器,后者原来的元素全部移除。可以用move语义,只是将内部pointer交换而已,并不复制value,具有常量精度,copy线性精度。
原来存在的迭代器和reference都仍指向原先所指元素,只不过那些元素已位于另一个容器中。(array除外)
-
大小相关操作函数
Empty() size() max_size()
-
比较
Unordered只有==、!=。其他的还有4个
比较两端(容器)必须属于同一类型
两个容器依序相等则相等
字典式判断大小
-
元素访问
所有容器都提供迭代器接口,支持range-based for。
最容易访问元素的办法:
For (const auto & elem : coll){
Std::cout<<elem<<std::endl;
}
要修改元素去掉const
在指定位置执行某种操作(安插、删除、搬移)可有cbegin()、cend()产生的迭代器只读操作,begin()、end()产生的迭代器进行改写操作。
-
容器提供类型
P260
-
-
其他STL容器和各容器的使用时机
可以使用string和寻常array作为STL,自己提供容器“STL化”的方法:
-
直接提供STL容器所需的接口
-
提供特殊迭代器
-
将上述两种方法结合
-
String作为STL容器
标准的stringclass提供了STL容器接口。对string的总结放在后面。
-
C-stylearray作为STL容器
容器array就是包覆了一个寻常的 static C-style array。比寻常array安全,而且效率没有变差。
-
实现reference语义
STL提供的都是value语义,以copy或move进行的。要使用reference语义就要采用智能指针(更安全,便捷)。也可以使用外覆器将byvalue转换为byreference。
用智能指针即将指针存入容器中,排序时按指针大小排序。
-
各种容器的使用时机
-
-
默认情况下使用vector,结构简单,随机访问,方便快捷。
-
若经常在头尾安插移除元素用deque,若希望元素移除时容器缩减也用deque
-
经常在容器中间安插移除和移动用list,但是list不支持随机访问,注意取舍。
-
需要容器对异常处理使得操作不成功便无任何作用,用list或associative/unordered容器。
-
经常依据某个准则查找元素同unorderedset/multiset,如果还须依赖元素的次序则用set/multiset。
-
如果是处理key/valuepair,用unorderedmap/multimap,如果还须依赖元素的次序则用map/multimap。
-
如果需要关联数组,用map,如果还须依赖元素的次序则用map。
-
如果需要字典结构用unorderedmultimap,如果还须依赖元素的次序则用multimap。
另外,如果需要两个排序准则,则需要使用reference语义来存储,各自拥有不同排序准则但是有共同的元素。
关联式容器每安插一个新元素就会重新排一次序,若经常安插效率不如用序列式容器:先安插所有元素,用排序算法进行一次完全排序。
-
容器总结——容器的共同能力和使用时机
最新推荐文章于 2024-08-26 10:56:40 发布