list

  双向链表,可以双向遍历,既指向前驱节点,又指向后继但不能随机访问任意元素,可动态增加或者减少元素,内存管理自动完成,增加任何元素都不会使迭代器失效,

  删除元素时,除了指向当前被删元素的迭代器外,其他迭代器都不会失效

  iterator指向当前被删除元素的下一个。

deque

  vector是单向开口的连续空间,deque是双向开口的连续线性空间

  双向开口则意味着可以在头尾两端分别插入或者删除元素

关联容器和顺序容器的区别在于:关联容器通过key存储读取元素,而顺序容器则是通过元素在容器中的位置顺序存储和访问元素

关联容器:map set(红黑树实现)

map

  所有元素根据元素的键值自动排序。map的所有元素都是pair,同时拥有key和value,不允许有2个相同的key值

  map和list某些性质类似,客户端对他进行删除或者增加时,操作之前的所有迭代器仍然有效,当然,被删除的那个除外

set

  所有元素根据元素的键值自动排序,set元素的键值就是实值

  set和list某些性质类似,客户端对他进行删除或者增加时,操作之前的所有迭代器仍然有效,当然,被删除的那个除外

如何选择合适的容器?

  1)插入删除影响容器的选用

  list容器表示不连续的内存区域,双向环状链表,允许向前或者向后遍历,在任何位置都能insert或者erase,insert或者erase不需要一定别的元素

  vector除了在末尾插入元素,不用移动其他位置元素,其他位置插入删除都需要,是连续的内存空间。

  2)元素的访问影响选择

  vector和deque支持对元素实现高效的随机访问,vector容器每次访问都是距离起点的固定偏移,随机访问十分有效。但是,list容器访问则特别的慢

  通常,除非找到选择使用其他容器更好得分理由,否则我们都选择vector

选择容器的提示

  1)随机访问->vector/deque

  2)中间位置插入删除->list

  3)首部或者尾部插入删除->deque

  如果无法确定某种应用选择哪种容器,编写代码时只使用vector/list容器提供的操作:使用迭代器而不是下标,避免随机访问元素。在必要时,可以很方便的将vector容器变成list容器。

PS(黄色笔记上整理 有部分未整理 有需要可以在细看)

C++ STL 顺序容器--list + 关联容器的更多相关文章

  1. stl中顺序性容器,关联容器两者粗略解释

    什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象 ...

  2. C++学习基础四——顺序容器和关联容器

    —顺序容器:vector,list,queue1.顺序容器的常见用法: #include <vector> #include <list> #include <queue ...

  3. STL学习笔记(三) 关联容器

    条款19:理解相等(equality)和等价(equivalence)的区别 相等的概念是基于 operator== 的,如果 operator== 的实现不正确,会导致并不实际相等等价关系是以&qu ...

  4. C++ Primer : 第十一章 : 关联容器之关联容器的迭代器和操作

    关联容器的操作 除了和顺序容器定义的类型之外,关联容器还定义了一下几种类型: 关联容器额外的类型别名  key_type    此容器类型的关键字类型 mapped_type  每个关键字关联的类型, ...

  5. C++之容器(关联容器)

    关联容器和顺序容器的本质区别:关联容器是通过键存取和读取元素.顺序容器通过元素在容器中的位置顺序存储和访问元素.因此,关联容器不提供front.push_front.pop_front.back.pu ...

  6. STL顺序容器的基本操作

    容器主要分为:顺序容器和关联容器 顺序容器和关联容器,顺序容器主要有:vector.list.deque等.其中vector表示一段连续的内存地址,基于数组的实现,list表示非连续的内存,基于链表实 ...

  7. STL之关联容器---set, mutilset, map, mutilmap

    STL的容器分为序列容器和关联容器.它们所表达的数据结构各有不同: 序列容器:vector(变长数组), list(链表), queue(队列), heap(堆算法)等 关联容器:set/mutils ...

  8. C++ Primer 学习笔记_34_STL实践与分析(8) --引言、pair类型、关联容器

    STL实践与分析 --引言.pair类型.关联容器 引言:     关联容器与顺序容器的本质差别在于:关联容器通过键[key]来存储和读取元素,而顺序容器则通过元素在容器中的位置顺序的存取元素. ma ...

  9. C++ Primer 5th 第11章 关联容器

    练习11.1:描述map 和 vector 的不同. map是关联容器,vector是顺序容器,关联容器与值无关,vector则与值密切相关 练习11.2:分别给出最适合使用 list.vector. ...

随机推荐

  1. 程序中的@Override是什么意思?

    @Override是Java5的元数据,自动加上去的一个标志,告诉你说下面这个方法是从父类/接口 继承过来的,需要你重写一次,这样就可以方便你阅读,也不怕会忘记 @Override是伪代码,表示重写( ...

  2. Linux下的搜索查找命令的详解(whereis)

    2.whereis  和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据 ...

  3. postgresql修改数据库编码

    update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'your_database'; 先用 \e ...

  4. 网站favicon图标的显示问题

    今天在微信开发者工具发现一个错误,说是找不到favicon.ico这个文件. 这个就是标签式浏览器显示在页面title前面的小图标,移动端也没什么用,所以一直没在意,今天有空就研究了一下,发现还是有点 ...

  5. Java进程与线程的区别

    每个进程都独享一块内存空间,一个应用程序可以同时启动多个进程.比如浏览器,打开一个浏览器就相当于启动了一个进程. 线程指进程中的一个执行流程,一个进程可以包含多个线程. 每个进程都需要操作系统为其分配 ...

  6. python全栈开发 * 27知识点汇总 * 180710

    27   time  os  sys  模块 time 模块 一.表示时间的三种方式 时间戳(timestamp), 元组(struct_time),格式化时间字符串(Format string) 小 ...

  7. 线段树合并 || BZOJ 5457: 城市

    题面:https://www.lydsy.com/JudgeOnline/problem.php?id=5457 题解: 线段树合并,对于每个节点维护sum(以该节点为根的子树中最大的种类和)和kin ...

  8. 创业维艰-->>书摘+乱七八糟

    我把我的思路告诉了比尔:在不破产的情况下, 退出云计算服务的唯一办法是提高销售额, 因为即“即使我们将所有员工全部辞掉,如果销售额无法实现大幅增长的话, 基础设施成本依然会把我们逼上绝路.我进一步解释 ...

  9. scrollview嵌套tableview

    之前写过一次,忘记了, 用的通知 FS

  10. css3 伸缩布局 display:flex等

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...