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. EnumUtil 链表转换工具类

    package com.das.common.util; import org.springframework.util.CollectionUtils; import java.lang.refle ...

  2. 高并发分布式系统中生成全局唯一(订单号)Id

    1.GUID数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么通过组合的方式,保留GUID的10个字节,用另6个字节表示GUID生成的时间(DateTime),这样我们将时间信息与GUID组合 ...

  3. Scala 按名称参数调用函数 与 =>的用法

    转自:http://blog.csdn.net/shenxiaoming77/article/details/54835679 通常情况下,函数的参数是传值参数:即参数的值在它被传递给函数之前被确定. ...

  4. Linux下的搜索查找命令的详解(find)

    4.find Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大部分选项 ...

  5. iOS - 数组字典模型根据模型属性key排序

    方法一: NSArray *sortArray = [arrayM sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { ...

  6. 查看集成环境 phpstudy 中 mysql 版本号

    1. 打开面板 2.其他选项菜单 3. Mysql工具 4. mysql命令行 5.输入密码,回车.phpstudy  mysql默认 root 6.运行 select    version();

  7. springMVC01,使用xml

    unit03_01 unit03_02 springmvc流程图 案例:hello示例 /hello.do --> springmvc --> /WEB-INF/hello.jsp /he ...

  8. vector排序

    // VectorSort.cpp : Defines the entry point for the console application. // #include "stdafx.h& ...

  9. 剑指offer——python【第15题】反转链表

    题目描述 翻转一个链表 样例:给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null 思路 一种比较简单的方法是用“摘除法”.就是先新 ...

  10. Intellij IDEA 生成返回值对象快捷键

    在编写一行JAVA语句时,有返回值的方法已经决定了返回对象的类型和泛型类型,我们只需要给这个对象起个名字就行. 如果使用快捷键生成这个返回值,我们就可以减少不必要的打字和思考,专注于过程的实现. 步骤 ...