通用概念。算法
顺序容器基本理解:按照顺序储存元素,并提供 元素具体操做(迭代器或其余) 和 顺序访问元素 的能力。数组
我的理解:安全
1)顺序:按照添加的前后次序排序。但,先进优先,仍是后进优先取决于具体容器。网络
我的应用:数据结构
1)在可使用容器时,尽可能使用容器。由于你没法保证本身的算法优于整个开发组。函数
2)选择容器的基本原则(from C+ primer):spa
1,在不知道如何选择时,使用vector。设计
2,单个元素需求内存很小,内存紧缺时,不要使用list/forward_list。指针
3,已知添加操做时,尽可能使用符合 原设计思想 的容器。例如:频繁的随机插入/删除,使用list/forward_list,而尽可能不使用vector,deque。对象
4,触类旁通:混合添加操做时,选择最频繁的添加操做,做为选择容器的标准。例如:100次后置添加 + 一次随机操做时,选择vector,deque。反之:list/forward_list。
5,触类旁通:添加操做在某些阶段存在统一,则能够进行容器替换。例如:输入元素使用 list。输入结束后,使用vector储存(copy list),再进行读取操做。
3)尽可能使用迭代器来操做容器——虽然有些容器支持下标。
vector容器:
一些细节:
1)使用连续内存保存元素。
2)能够下标访问元素(速度快)。但是看成动态数组使用。
3)中间添加/删除元素耗时。因,须要从新调整内存。同时会致使迭代器失效(大几率)。
4)添加新元素时(push_back),也可能从新分配内存。致使迭代器失效(中几率)。
5)容器存在增加方式:超出时,按照必定量增长内存,以保证添加数个元素后,才须要再次分配内存。量值可经过函数设定(不建议)。
deque容器:
一些细节:
1)使用连续内存保存元素。
2)不肯定是否可使用下标访问。
list容器:双向链表。
一些细节:
1)使用链表的思想。
2)额外内存开销相对较大。
3)不支持下标。
forward_list容器:
一些细节:
1)和list容器相似。
2)主要特征:单向链表。
array容器:
一些细节:
1)对数组的封装。增强安全性。
2)有数组的特性。
string容器:
一些细节:
1)使用连续内存保存元素。
2)用来保存字符串。
适配器:
概念:一个适配器是一种机制。经过适配器,可使容器从行为上模仿其余数据结构。
顺序容器可用适配器:stack, queue, priority_queue。
我的理解:用来模拟一些通用的数据结构。如上:堆栈,队列。
疑惑:为什么不直接作成容器?
基本常识:
1)主要为:map 和 set。衍生型:multi和unorder.例如:multimap, unorder_multimap.
2)使用pair做为单位元素。
1,key-value组成一个pair.
2,first成员:key。second成员:value。
3,key为const类型不可改变。
3)关联容器的构成:key-pair.
基本要点:
1)一般不对关联容器使用 泛型算法。
2)有序关联容器,有 严格弱序 的要求。默认使用 [<=]。固然,也可使用谓词或lambda表达式来自定义。