C++ STL 顺序容器--list + 关联容器
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 + 关联容器的更多相关文章
- stl中顺序性容器,关联容器两者粗略解释
什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象 ...
- C++学习基础四——顺序容器和关联容器
—顺序容器:vector,list,queue1.顺序容器的常见用法: #include <vector> #include <list> #include <queue ...
- STL学习笔记(三) 关联容器
条款19:理解相等(equality)和等价(equivalence)的区别 相等的概念是基于 operator== 的,如果 operator== 的实现不正确,会导致并不实际相等等价关系是以&qu ...
- C++ Primer : 第十一章 : 关联容器之关联容器的迭代器和操作
关联容器的操作 除了和顺序容器定义的类型之外,关联容器还定义了一下几种类型: 关联容器额外的类型别名 key_type 此容器类型的关键字类型 mapped_type 每个关键字关联的类型, ...
- C++之容器(关联容器)
关联容器和顺序容器的本质区别:关联容器是通过键存取和读取元素.顺序容器通过元素在容器中的位置顺序存储和访问元素.因此,关联容器不提供front.push_front.pop_front.back.pu ...
- STL顺序容器的基本操作
容器主要分为:顺序容器和关联容器 顺序容器和关联容器,顺序容器主要有:vector.list.deque等.其中vector表示一段连续的内存地址,基于数组的实现,list表示非连续的内存,基于链表实 ...
- STL之关联容器---set, mutilset, map, mutilmap
STL的容器分为序列容器和关联容器.它们所表达的数据结构各有不同: 序列容器:vector(变长数组), list(链表), queue(队列), heap(堆算法)等 关联容器:set/mutils ...
- C++ Primer 学习笔记_34_STL实践与分析(8) --引言、pair类型、关联容器
STL实践与分析 --引言.pair类型.关联容器 引言: 关联容器与顺序容器的本质差别在于:关联容器通过键[key]来存储和读取元素,而顺序容器则通过元素在容器中的位置顺序的存取元素. ma ...
- C++ Primer 5th 第11章 关联容器
练习11.1:描述map 和 vector 的不同. map是关联容器,vector是顺序容器,关联容器与值无关,vector则与值密切相关 练习11.2:分别给出最适合使用 list.vector. ...
随机推荐
- 安装Oracle Database 11g 找不到文件“WFMLRSVCApp.ear” .
在64位Windows 7 系统下安装Oracle Database 11g 的过程中,出现提示:“未找到文件D:\app\Administrator\product\11.2.0\dbhome_1\ ...
- python @staticmethod和@classmethod的作用
一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法. 而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用. 这有利于组织代码,把某些应 ...
- windows安装mysql8
1:首先去官网下载安装包 下载地址:https://dev.mysql.com/downloads/mysql/ 2:将解压文件解压到你安装的目录:E:\mysql-8.0.11-winx64 (我 ...
- Nginx子域名配置
extends:http://blog.csdn.net/xiaoping0915/article/details/53899465 ,http://www.myhack58.com/Article/ ...
- mac上制作ubuntu引导盘
https://help.ubuntu.com/community/How%20to%20install%20Ubuntu%20on%20MacBook%20using%20USB%20Stick h ...
- windows修改PowerShell(命令提示符)默认中文编码方式
如果以下方法都没有作用的话,可以直接在代码中调用<stdlib.h>中的system("mode con cp select=65001")或者是system(&quo ...
- PHP函数之dirname()
1. 定义和用法 dirname()函数返回路径中的目录部分.即返回去掉文件名后的目录名. 2. 参数 dirname(path): 参数 path是一个包含有指向一个文件的全路径的字符串. 3. 举 ...
- web 接口测试入门
在此之前先简单的介绍一下基本概念:我们想要打开一个网站,首先是需要往浏览器的地址的URL输入框架中输入网地址.当我敲下回车后,通过HTTP协议,将网址传送到域名解析服务器,域名解析服务器根据网址找到对 ...
- ThreadPool study
线程池浅析 线程池顾名思义就是放线程的池子 Thread Pool. 那么为什么要有线程池呢?有些时候系统需要处理非常多的执行时间很短的请求,如果每一个请求都开启一个新的线程,则系统创建销毁线程的开销 ...
- linux下部分软件截图
1.配置环境变量 vi /etc/profile JAVA_HOME=/usr/local/usr_software/jdk_1.8.0.121CLASSPATH=.:$JAVA_HOME/lib/t ...