C++ 常见容器

迭代器。

基本介绍(来源于网络):迭代器是一种抽象的概念。可以遍历容器内的 部分/所有 元素。每一个迭代器中包含着元素的地址。  它能够将 抽象容器 和 泛型算法 结合起来。
 
大体原理:
  1) 迭代器对象 包含 容器内元素的地址。
  2)经过设计,将元素操做统一。
我的理解:
  1)迭代器的概念,有效整合不一样容器和泛型算法。它提供了一个接口,用来操做容器内元素。
  2)通俗理解:他是STL库的信息接口。
  3)它要求全部操做应该有相同接口。
  4)容器须要提供本身的迭代器,使用泛型算法尽可能使用迭代器。
一些细节:
  1)改变容器内元素的储存地址的操做,可能致使原有迭代器失效。间接说明,迭代器的本质是指针。
  2)尾后迭代器一般表示结束。
  3)迭代器不能使用 取地址符号’&‘ 来获取。
 
五类迭代器:一个真正的迭代器能够包含如下数种类型。
  1)输入/出迭代器:读取序列中的元素。须要支持如下几点:
    1,[ == ] [ != ],[ ++ ],[ * ],[ -> ]
  2)前向迭代器:单向移动。
  3)双向迭代器:双向移动
  4)随机访问迭代器:支持使用下标操做。

顺序容器。

通用概念。算法

  顺序容器基本理解:按照顺序储存元素,并提供 元素具体操做(迭代器或其余) 和 顺序访问元素 的能力。数组

  我的理解:安全

    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表达式来自定义。

相关文章
相关标签/搜索