C++ 常见容器

迭代器。

基本介绍(来源于网络):迭代器是一种抽象的概念。能够遍历容器内的 部分/全部 元素。每个迭代器中包含着元素的地址。  它可以将 抽象容器 和 泛型算法 结合起来。

大致原理:

  1)迭代器对象 包含 容器内元素的地址。

  2)通过设计,将元素操作统一。

个人理解:

  1)迭代器的概念,有效整合不同容器和泛型算法。它提供了一个接口,用来操作容器内元素。

  2)通俗理解:他是STL库的信息接口。

  3)它要求所有操作应该有相同接口。

  4)容器需要提供自己的迭代器,使用泛型算法尽量使用迭代器。

一些细节:

  1)改变容器内元素的储存地址的操作,可能导致原有迭代器失效。间接说明,迭代器的本质是指针。

  2)尾后迭代器通常表示结束。

  3)迭代器不能使用 取地址符号’&‘ 来获取。

五类迭代器:一个真正的迭代器可以包含以下数种类型。

  1)输入/出迭代器:读取序列中的元素。需要支持以下几点:

    1,[ == ] [ != ],[ ++ ],[ * ],[ -> ]

  2)前向迭代器:单向移动。

  3)双向迭代器:双向移动

  4)随机访问迭代器:支持使用下标操作。

顺序容器。

通用概念。

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

  个人理解:

    1)顺序:按照添加的先后次序排序。但,先进优先,还是后进优先取决于具体容器。

  个人应用:

    1)在可以使用容器时,尽量使用容器。因为你无法保证自己的算法优于整个开发组。

    2)选择容器的基本原则(from C+ primer):

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

时间: 2024-08-06 10:35:22

C++ 常见容器的相关文章

几种常见 容器 比较和分析

几种常见 容器 比较和分析 hashmap, map, vector, list ...hash&n list支持快速的插入和删除,但是查找费时; vector支持快速的查找,但是插入费时. map查找的时间复杂度是对数的,这几乎是最快的,hash也是对数的. 如果我自己写,我也会用二叉检索树,它在大部分情况下可以保证对数复杂度,最坏情况是常数复杂度,而std::map在任何情况下都可以保证对数复杂度,原因是它保证存诸结构是完全二叉检索树,但这会在存诸上牺牲一些时间. STL 中的 map 内部

几种常见 容器 比较和分析 hashmap, map, vector, list .

list支持快速的插入和删除,但是查找费时; vector支持快速的查找,但是插入费时. map查找的时间复杂度是对数的,这几乎是最快的,hash也是对数的. 如果我自己写,我也会用二叉检索树,它在大部分情况下可以保证对数复杂度,最坏情况是常数复杂度,而std::map在任何情况下都可以保证对数复杂度,原因是它保证存诸结构是完全二叉检索树,但这会在存诸上牺牲一些时间. STL   中的   map   内部是平衡二叉树,所以平衡二叉树的性质都具备.查找数据的时间也是对数时间.vector,在分配

几种常见 容器 比较和分析 hashmap, map, vector, list ...hash table

转自:http://www.haogongju.net/art/1543058 list支持快速的插入和删除,但是查找费时; vector支持快速的查找,但是插入费时. map查找的时间复杂度是对数的,这几乎是最快的,hash也是对数的. 如果我自己写,我也会用二叉检索树,它在大部分情况下可以保证对数复杂度,最坏情况是常数复杂度,而std::map在任何情况下都可以保证对数复杂度,原因是它保证存诸结构是完全二叉检索树,但这会在存诸上牺牲一些时间. STL   中的   map   内部是平衡二叉

c++常见容器操作

总结下常见c++容器操作. 1.Vector. list和 dequeVector是数组,List 是双端链表,deque时双向队列.分别引入vector/list/deque库. vector.deque支持随机访问和迭代器偏移,list.deque支持双向访问,list只能自加自减. 增 push_back.insert push_front [vector不可用] resize [list不可用] 删 pop_back.erase pop_front [vector不可用] resize

kotlin基础 常见容器的取值范围

原文地址:https://www.cnblogs.com/superxuezhazha/p/12027567.html

HTML容器标签和文本标签

html中的容器级标签和文本级标签,css中的块级元素和行内元素是我们常常拿来比较的四个名词(行内块级暂时先不考虑).注:如果标签嵌套错误,可能会发生浏览器解析错误的情况,只是针对嵌套做的这个. 容器标签 1.容器级的标签可以简单的理解为能嵌套其它所有标签的标签. 2.常见容器级的标签: div h ul ol dl li dt dd .... 文本标签 1.文本级的标签对应容器级标签,只能嵌套文字/图片/超链接的标签. 2.常见文本级的标签:span p buis strong em ins

Docker容器的自动化监控实现

欢迎访问网易云社区,了解更多网易技术产品运营经验. 近年来容器技术不断成熟并得到应用.Docker作为容器技术的一个代表,目前也在快速发展中,基于 Docker的各种应用也正在普及,与此同时 Docker对传统的运维体系也带来了冲击.我们在建设运维平台的过程中,也需要去面对和解决容器相关的问题. Docker的运维是一个体系,而监控系统作为运维体系中重要组成部分,在 Docker运维过程中需要重点考虑.本文介绍了一种针对 Docker容器的自动化监控实现方法,旨在给 Docker运维体系的建立提

Javaweb里“容器“如何出现,应用在哪,未来发展趋势

容器是一个Java 所编写的程序,可当做一个工具,没有容器时必须自行编写程序以管理对象关系,现在容器都会自动做好. 有一说法:如果有一个类专门用来存放其它类的对象,这个类就叫做容器.另一说法:容器里存放的是对象的引用(或者说变量)而不是对象,对象还在容器外,容器内放的是对象的引用,类似于C语言的指针,也就是对象实例化后在堆内存中的地址,容器存放引用而不是存放对象本身也是容器设计巧妙的地方. 常用的容器有: WebSphere,WebLogic,Resin,Tomcat,Glassfish 容器的

Python 容器使用的 5 个技巧和 2 个误区

"容器"这两个字很少被 Python 技术文章提起.一看到"容器",大家想到的多是那头蓝色小鲸鱼:Docker,但这篇文章和它没有任何关系.本文里的容器,是 Python 中的一个抽象概念,是对专门用来装其他对象的数据类型的统称. 在 Python 中,有四类最常见的内建容器类型: 列表(list). 元组(tuple). 字典(dict). 集合(set).通过单独或是组合使用它们,可以高效的完成很多事情. Python 语言自身的内部实现细节也与这些容器类型息息