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. ...
随机推荐
- python 算术运算
1. 算术运算符与优先级 # -*- coding:utf-8 -*- # 运算符含有+,-,*,/,**,//,% # ** 表示^ , 也就是次方 a = 2 ** 4 print '2 ** 4 ...
- 【Zookeeper系列】构建ZooKeeper应用(转)
原文地址:https://www.cnblogs.com/sunddenly/p/4064992.html 一.配置服务 配置服务是分布式应用所需要的基本服务之一,它使集群中的机器可以共享配置信息中那 ...
- intelj idea Database视图竟然还悄悄开进程,不能忍
一.前言 偶然发现,任务管理器里有个莫名其妙的java进程.看了下启动参数: CommandLine="C:\Program Files\Java\jdk1.8.0_172\bin\java ...
- css 获取从第n个开始,之后的所有元素
<div id="box"> <div></div> <div>等待获取</div> <div>等待获取&l ...
- css之高度塌陷及其解决方法
浅谈 清除浮动 的多种方式(clearfix) 1.什么是浮动 ? 是否脱离文档流? 1.普通流定位 static(默认方式) 普通流定位,又称为文档流定位,是页面元素的默认定位方式 页面中的块级元素 ...
- 1. node.js 认识 (一)
官网: (下载安装nodejs) https://nodejs.org/en/ http://nodejs.cn/ Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环 ...
- 判断网页请求与FTP请求
实例说明 在访问Internet网络时,经常涉及到很多访问协议,其中最明显.最常用的就是访问页面的http协议.访问ftp服务器的FTP协议等.
- Spring-Boot自动装载servlet
Spring-Boot自动装载servlet 本人spring-boot相关博客均自己手动编写,但技术均从简书 恒宇少年 处学习,该大佬一直是我的偶像,鉴于能充分理解,所以已做笔记的方式留下这些文档, ...
- javascript的数组之sort()
sort()方法用in-place的算法对原数组进行排序,但不会产生新的数组.这个方法不是一个稳定的排序,默认采用的是安字符串Unicode码点进行排序的. let fruit = ['cherri ...
- 根据Excel模板,填写报表,并下载到web浏览器端
package com.neusoft.nda.basic.recordmanager.viewelec.servlet; import java.io.File; import java.io.Fi ...