C++容器
压力容器的分类

压力容器压力容器,从广义上讲它包括所有承受压力载荷的密闭容器。
但此处所指的压力容器只是其中的一部份,即为《压力容器安全技术监察规程》所辖范围内的压力容器。
由于这部分压力容器事故率高,事故的破坏性大,损失严重,所以我们应对这部分压力容器的设计、制造、使用、检验、修理、改造等环节进行监督检查,以确保安全。
由于压力容器的型式种类繁多,使用要求各不相同,因此压力容器有许多不同的分类方法,下面我们仅对按压力等级、工艺用途及管理进行的分类作一介绍。
分类方法很多,主要有如下几种:1.按压力、品种、介质毒性及易燃介质分类1.1按压力分为低、中、高及超高压,前三种在材料、失效判据(准则)、计算方法、制造要求上基本一致,而超高压则截然不同。
1.2按介质毒性及易燃性分类,主要出自安全考虑,即一旦发生事故(爆炸、泄漏等)的危害程度。
2.按制造许可级别分类2.1 按制造许可级别分类,一般考虑如下一些因素:a) 安全性及制造难易程度的不同,这里涉及P、P•V、介质特性、材料强度级别等;b) 工作(安放)位置分为固定与移动,移动的安全要求高于固定,且应对减轻自重、防冲击、各类仪表的装设做特殊考虑;c) 材料,金属与非金属制容器在制造与检验方法上有很大不同;d) 考虑制造特点,利于专业化生产,如球罐。
2.2 对不同制造许可级别的企业,提出不同的资源条件与安全质量要求3.按生产工艺过程中作用原理分类分为反应、换热、分离、储存四类,其中反应容器安全性要求最高,因其在进行物理、化学反应时,可能造成压力、温度的变化。
3.此外,尚有如下一些常见的分类方法:4.1按形状分类,如圆筒形、球形、组合型(前者均为回转壳体)以及方形、矩形等;4.2按筒体结构分为整体式、组合式。
4.3按制造方法分为焊接(最为普通)、锻造(主要用于超高压)、铸造(主要优点是方便制造,但因其质量问题需加大安全系数,多用于小型、低压)。
4.4按材料分为金属与非金属两大类,其中:a)金属中分为钢、铸铁、有色金属与合金。
压力容器定义和分类

压力容器的定义和分类一、什么叫压力容器指同时具备下列三个条件的容器才能称之为压力容器:1)工作压力(PW) ≥ 0.1MPa (不含液体静压力).2)内直经(非圆形截面积指最大尺寸)≥ 0.15M且容积V≥ 0.025M3.3)盛装介质为气体、液化气体或最高工作温度大于等于标准沸点的液体。
二、压力容器的分类1)按设计压分为:低压,中压、高压、超高压四个压力等级。
1.1 低压容器(代号L):0.1MPa ≤P<1.6MPa.1.2 中压容器(代号M):1.6MPa ≤P<10MPa.1.3 高压容器(代号H):10MPa ≤P<100MPa.1.4 超高压容器(代号U):P≥100MPa.2) 按压力容器在生产工艺过程中的作用原理分,可分为:反应压力容器,换热压力容器,分离压力容器,储存压力容器四种。
2.1 反应压力容器(代号R),主要用于介质的物理、化学反应的压力容器,如反应塔等。
2.2 换热压力容器(代号E),主要是用于完成介质热量交换的压力容器,如热交换器,冷凝器。
2.3 分离压力容器(代号S),主要是用于完成介质的流体压力平衡缓冲和气体净化分离,如分离器、缓冲器、分汽缸等。
2.4 储存压力容器(代号C,其中球罐代号B),主要是用于储存、盛装气体、液体,液化气体等介质的压力容器,如各种型式的储罐。
3)按使用位置分,可分为固定式压力容器和移动式压力容器.3.1 固定工压力容器有固定的安装和使用地点,用管道与其他设备相连.3.2 移动式压力容器则无固定安装和使用地点,如铁路罐车, 汽车罐车.移动式压力容器的一个重要分支就是气瓶.气瓶是使用的最为普遍的一种移动式力容器,它的的特点是数量大,使用范围广,充装的气体种类多,重复使用率高。
气瓶分为以下种:a: 无缝气瓶,如氧气瓶,b: 焊接气瓶,如液氨,c: 溶解乙炔气瓶,d: 液化石油气瓶,e: 特种气瓶,如车用气瓶。
4)为了便于安全监察和管理,按容器的压力等级、容积、介质的危害程度及生产过程中的作用和用途,把压力容器分为三类。
压力容器定义

压力容器安全知识培训教材一:什么叫压力容器:指同时具备下列三个条件的容器才能称之为压力容器:1)工作压力(PW)≥(不含液体静压力).2)内直经(非圆形截面积指最大尺寸)≥且容积V≥.3)盛装介质为气体、液化气体或最高工作温度大于等于标准沸点的液体。
二:压力容器的分类1)按设计压分为:低压,中压、高压、超高压四个压力等级。
低压容器(代号L):≤P<.中压容器(代号M):≤P<10MPa.高压容器(代号H):10MPa≤P<100MPa.超高压容器(代号U):P》100MPa.2)按压力容器在生产工艺过程中的作用原理分,可分为:反应压力容器,换热压力容器,分离压力容器,储存压力容器四种。
反应压力容器(代号R),主要用于介质的物理、化学反应的压力容器,如反应塔等。
换热压力容器(代号E),主要是用于完成介质热量交换的压力容器,如热交换器,冷凝器。
分离压力容器(代号S),主要是用于完成介质的流体压力平衡缓冲和气体净化分离,如分离器、缓冲器、分汽缸等。
储存压力容器(代号C,其中球罐代号B),主要是用于储存、盛装气体、液体,液化气体等介质的压力容器,如各种型式的储罐。
3)按使用位置分,可分为固定式压力容器和移动式压力容器.固定工压力容器有固定的安装和使用地点,用管道与其他设备相连.移动式压力容器则无固定安装和使用地点,如铁路罐车,汽车罐车.移动式压力容器的一个重要分支就是气瓶.气瓶是使用的最为普遍的一种移动式力容器,它的的特点是数量大,使用范围广,充装的气体种类多,重复使用率高。
气瓶分为以下种:a:无缝气瓶,如氧气瓶,b:焊接气瓶,如液氨,c:溶解乙炔气瓶,d:液化石油气瓶,e:特种气瓶,如车用气瓶。
4)为了便于安全监察和管理,按容器的压力等级、容积、介质的危害程度及生产过程中的作用和用途,把压力容器分为三类。
具有下列情况之一的,为第三类压力容器。
a:高压容器,b:中压容器(仅限毒性程度及极高和高危害介质)。
三类压力容器划分

三类压力容器划分1、下列情况之一的,为第三类压力容器:(1)高压容器;(2)中压容器(仅限毒性程度为极度和高度危害介质);(3)中压储存容器(仅限易燃或毒性程度为中度危害介质,且PV乖积大于等于10MPa• m3);(4)中压反应容器(仅限易燃或毒性程度为中度危害介质,且PV乖积大于等于0.5MPa• m3);(5)低压容器(仅限毒性程度为极度和高度危害介质,且PV乖积大于等于0.2MPa• m3);(6)高压、中压管壳式余热锅炉;(7)中压搪玻璃压力容器;(8)使用强度级别较高(指相应标准中抗拉强度规定值下限大于等于540MPa)的材料制造的压力容器;(9)移动式压力容器,包括铁路罐车(介质为液化气体、低温液体)、罐式汽车[液化气体运输(半挂)车、低温液体运输(半挂)车、永久气体运输(半挂)车]和罐式集装箱(介质为液化气体、低温液体)等;(10)球形储罐(容积大于等于50m3);(11)低温液体储存容器(容积大于5 m3)。
2、下列情况之一的,为第二类压力容器:(1)中压容器;(2)低压容器(仅限毒性程度为极度和高度危害介质);(3)低压反应容器和低压储存容器(仅限易燃或毒性程度为中度危害介质);(4)低压管壳式余热锅炉;(5)低压搪玻璃压力容器.3、低压容器为第一类压力容器(1、2、规定除外的)。
压力容器的压力等级、品种、介质毒性程度和易燃介质的划分一、按压力容器的设计压力(p)分为低压、中压、高压、超高压四个压力等级,如下;1、低压(代号L)0.1MPa≤P<1.6MPa2、中压(代号M)1.6MPa≤P<10MPa3、高压(代号H)10MPa≤P<100MPa4、超高压(代号U)p≥100 MPa二、按压力容器在生产工艺过程中的作用原理,分为反应压力容器(代号R)、换热压力容器(代号E)、分离压力容器(代号S)、储存压力容器(代号C)。
三、介质毒性程度的分级和易燃介质的划分如下:1、压力容器中化学介质毒性程度和易燃介质的分参照HG20660《压力容器中化学介质毒性危害和爆炸危险程度分类》的规定。
c开头 er结尾的单词 -回复

c开头er结尾的单词-回复大标题:C语言中以“c开头er结尾”的单词引言:C语言是一种被广泛应用的计算机编程语言,它的语法规范和强大的功能使得它成为了程序员们的首选。
在C语言中,有许多以“c开头er 结尾”的单词,这些单词在编程中都有着特定的用途和功能。
本文将一步一步解析这些单词,并讨论它们在实际编程中的应用。
正文:一、常用的以"c开头er结尾"的单词1. Compiler(编译器):编译器是一种将高级语言代码转换成机器语言的软件工具。
在C语言中,通过编译器将代码转换成可执行文件,从而实现程序的运行。
编译器的作用非常重要,它能够将人类可读的代码转换成机器可执行的指令。
常见的编译器有GCC和Clang等。
在程序开发过程中,编译器的性能和效率对于代码质量和执行效果至关重要。
2. Debugger(调试器):调试器是一种软件工具,用于诊断和修复在程序运行过程中出现的错误。
调试器能够为开发者提供诸如设置断点、查看变量值和执行程序的功能,从而更好地理解和分析代码。
调试器在程序开发的过程中非常重要。
它帮助开发者找出程序中的错误并进行修复,从而增强了程序的稳定性和可靠性。
3. Container(容器):容器是一种数据结构,用于存储和组织其他数据元素。
在C语言中,容器可以是数组、链表、栈、队列等。
容器在计算机编程中起到了重要的作用,它可以方便地管理和操作数据。
不同的容器有着不同的特点和适用场景,开发者可以根据实际需求选择合适的容器来存储和操作数据。
4. Processor(处理器):处理器是计算机中的核心组件,负责执行程序中的指令和计算任务。
在C语言中,开发者可以通过编写程序来控制和操作处理器的功能。
处理器的性能和效率决定了程序的执行速度和响应能力。
在编写程序时,理解处理器的架构和功能对于优化程序的性能和效率非常重要。
二、以"c开头er结尾"的单词的应用实例1. Compiler(编译器)应用实例:在编写C语言程序时,我们可以使用编译器将源代码转换成可执行文件。
第二章 压力容器基本知识

第二章压力容器基本知识第一节压力容器类别划分【学习目标】学习TSG R0004-2009《固定式压力容器安全技术监察规程》,掌握压力容器类别划分原则。
学习HG20660-2000《压力容器中化学介质毒性危害和爆炸危害程度分类》,了解常见的化学介质毒性危害和爆炸危害程度分类。
一、压力容器类别划分TSG R0004-2009《固定式压力容器安全技术监察规程》1.7条款规定:根据危险程度,本规程适用范围内的压力容器划分为三类,以利于进行分类监督管理。
压力容器类别划分与三个因素有关:介质特性(组别)、设计压力(MPa)、容积(L)。
压力容器类别划分的意义是有利于压力容器的分类监督和管理,如压力容器设计许可证、压力容器制造许可证等都与压力容器类别有关。
A1 压力容器类别划分A1.1 介质分组压力容器的介质分为以下两组:(1)第一组介质,毒性程度为极度危害、高度危害的化学介质,易爆介质,液化气体。
(2)第二组介质,除第一组以外的介质。
A1.2 介质危害性介质危害性指压力容器在生产过程中因事故致使介质与人体大量接触,发生爆炸或者因经常泄漏引起职业性慢性危害的严重程度,用介质毒性程度和爆炸危害程度表示。
A1.2.3 介质毒性危害程度和爆炸危害程度的确定按照HG20660-2000《压力容器中化学介质毒性危害和爆炸危害程度分类》确定。
A1.3 压力容器类别划分方法A1.3.1 基本划分压力容器类别的划分应当根据介质特性,按照以下要求选择类别划分图,再根据设计压力p(单位MPa)和容积V(单位L),标出坐标点,确定压力容器类别:(1)第一组介质,压力容器类别的划分见图A-1;(2)第二组介质,压力容器类别的划分见图A-2。
A1.3.2 多腔压力容器类别划分按照类别高的压力腔作为该容器的类别并且按照该类别进行使用管理。
A1.3.3 同腔多种介质压力容器类别划分一个压力腔内有多种介质时,按照组别高的介质划分类别。
A1.3.4 介质含量极小的压力容器类别划分当某一危害性物质在介质中含量极小时,应当根据其危害程度及其含量综合考虑,按照压力容器设计单位决定的介质组别划分类别。
c语言 容器

容器插入方法:第一种方法Push_front() / push_back(); 向量容器不能够使用Push_front()函数。
第二种方法insert();insert()函数的中的位置需要使用对象.beging() / 对象.end() + / -x来控制。
Insert()函数用法:Insert(L, O);把O复制到L之前Insert(L, N, O);把O在L之前复制N次Insert(L,i,j);把位于范围i,j之间的元素复制到L之前。
第三种方法通过使用赋值运算符向容器中添加元素,也可以把一个容器赋值到另一个空容器。
删除方法:每个容器都有下例基本删除方式:pop_front() / pop_back(), erase(), clear(), 析构函数。
Erase(L);移走L所指向的元素,也是使用对象.end() / begin() + / -x控制。
Erase(L1, L2);移走在L1和L2之间的元素。
容器头文件:#include <vocter>#include <deque>//双端列队容器#include <list>//双向链表容器#include <slist>//单向链表容器#include <bit_vector>//位向量容器#include <set>//集合容器#include <mulitset>//多重集合容器#include <map>//映照容器#include <multimap>//多重映照容器#include <hash_set>//哈希集合容器#include <hash_map>//哈希映照容器#include <string>//基本字符序列容器#include <stack>//堆栈容器#include <queue>//队列容器,优先队列容器priority_queue<int> pq;算法头文件#include <algorithm>其它函数:Swap(x);与容器x中的元素进行调换,只限于容器之间,容器内部不能使用。
C电容[指南]
![C电容[指南]](https://img.taocdn.com/s3/m/af26a858ff4733687e21af45b307e87101f6f801.png)
C电容1、电容器能阻止直流电通过,能让交流电通过;对交流电的阻碍作用称为容抗,与交流电的频率成反比,频率越高,越容易让交流电通过。
电阻对交流、直流的阻碍作用相同,即与电流的频率无关。
2、在电路中用来作滤波电路:去耦、滤波、傍路;在前后级之间用来作耦合元件。
3、与电感组成LC谐振回路。
与电阻组成RC移相电路、延时电路。
4、在单相交流电动机中用来移相,以产生旋转磁场。
电容是电容元件(电容器)的简称,以储存电荷为其特征,因此具有储存电场能量的功能。
常见的电容类型有电解电容、陶瓷电容、钽电容等。
电容器主要用于交流电路及脉冲电路中,在直流电路中电容器一般起隔断直流的作用。
电阻只能消耗电能~转化成热能电容可以在接电时候充电当断开时候能放出电能~二者是不一样的电容C=Q/U电阻R=ρl/s在电容降压电路中,在降压电容的两端并联有一个泄放电阻,请问这个泄放电阻的作用是什么呢?在多个电容相串联的电路中,往往在电容两端并联一个电阻,这个电阻的阻值一般都较大,约在100K左右。
这个电阻不是泄放电阻,而是平衡电阻。
是平衡电容两端电压用的。
用了这个电阻之后,可以防止个别电容两端的电压过高而损坏。
起稳压的作用!防止开机时脉冲和空载时的电压过高而损坏元器件。
当正眩波在最大峰值时刻被切断时,电容上的残存电荷无法释放,会长久存在。
在维修时如果人体接触电容的金属部分,会有强烈的触电可能,而电阻的存在,能将残存的电荷泻放掉,从而保证人、机安全。
1、当在电路上并联电阻时,根据1/R=1/R1+......+1/Rn,电路上总电阻减小,总电流(I=U/R)增大;2、但由于电路上电阻为并联,每个电阻所加的电压相等,即每个电阻上的电流并没有增加;3、由于每个电阻的功率恒定,当需要增大某处电路的电流时,往往并联相同功率的电阻,在电路设计中,更是用到并联电阻的用法;[智者] 电容是表征电容器容纳电荷的本领的物理量。
我们把电容器的两极板间的电势差增加1伏所需的电量,叫做电容器的电容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++容器类分类:C++2014-07-13 09:56 34人阅读评论(0) 收藏举报什么是容器首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。
很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种“对象”还包含了一系列处理“其它对象”的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了一个好处,就是“容器类是一种对特定代码重用问题的良好的解决方案”。
容器还有另一个特点是容器可以自行扩展。
在解决问题时我们常常不知道我们需要存储多少个对象,也就是说我们不知道应该创建多大的内存空间来保存我们的对象。
显然,数组在这一方面也力不从心。
容器的优势就在这里,它不需要你预先告诉它你要存储多少对象,只要你创建一个容器对象,并合理的调用它所提供的方法,所有的处理细节将由容器来自身完成。
它可以为你申请内存或释放内存,并且用最优的算法来执行您的命令。
容器是随着面向对象语言的诞生而提出的,容器类在面向对象语言中特别重要,甚至它被认为是早期面向对象语言的基础。
在现在几乎所有的面向对象的语言中也都伴随着一个容器集,在C++ 中,就是标准模板库(STL )。
和其它语言不一样,C++ 中处理容器是采用基于模板的方式。
标准C++ 库中的容器提供了多种数据结构,这些数据结构可以与标准算法一起很好的工作,这为我们的软件开发提供了良好的支持!通用容器的分类STL 对定义的通用容器分三类:顺序性容器、关联式容器和容器适配器。
顺序性容器是一种各元素之间有顺序关系的线性表,是一种线性结构的可序群集。
顺序性容器中的每个元素均有固定的位置,除非用删除或插入的操作改变这个位置。
这个位置和元素本身无关,而和操作的时间和地点有关,顺序性容器不会根据元素的特点排序而是直接保存了元素操作时的逻辑顺序。
比如我们一次性对一个顺序性容器追加三个元素,这三个元素在容器中的相对位置和追加时的逻辑次序是一致的。
关联式容器和顺序性容器不一样,关联式容器是非线性的树结构,更准确的说是二叉树结构。
各元素之间没有严格的物理上的顺序关系,也就是说元素在容器中并没有保存元素置入容器时的逻辑顺序。
但是关联式容器提供了另一种根据元素特点排序的功能,这样迭代器就能根据元素的特点“顺序地”获取元素。
关联式容器另一个显著的特点是它是以键值的方式来保存数据,就是说它能把关键字和值关联起来保存,而顺序性容器只能保存一种(可以认为它只保存关键字,也可以认为它只保存值)。
这在下面具体的容器类中可以说明这一点。
容器适配器是一个比较抽象的概念,C++的解释是:适配器是使一事物的行为类似于另一事物的行为的一种机制。
容器适配器是让一种已存在的容器类型采用另一种不同的抽象类型的工作方式来实现的一种机制。
其实仅是发生了接口转换。
那么你可以把它理解为容器的容器,它实质还是一个容器,只是他不依赖于具体的标准容器类型,可以理解是容器的模版。
或者把它理解为容器的接口,而适配器具体采用哪种容器类型去实现,在定义适配器的时候可以由你决定。
下表列出STL 定义的三类容器所包含的具体容器类:vector ,deque 和list顺序性容器:向量vector :是一个线性顺序结构。
相当于数组,但其大小可以不预先指定,并且自动扩展。
它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组。
在创建一个vector 后,它会自动在内存中分配一块连续的内存空间进行数据存储,初始的空间大小可以预先指定也可以由vector 默认指定,这个大小即capacity ()函数的返回值。
当存储的数据超过分配的空间时vector 会重新分配一块内存块,但这样的分配是很耗时的,在重新分配空间时它会做这样的动作:首先,vector 会申请一块更大的内存块;然后,将原来的数据拷贝到新的内存块中;其次,销毁掉原内存块中的对象(调用对象的析构函数);最后,将原来的内存空间释放掉。
如果vector 保存的数据量很大时,这样的操作一定会导致糟糕的性能(这也是vector 被设计成比较容易拷贝的值类型的原因)。
所以说vector 不是在什么情况下性能都好,只有在预先知道它大小的情况下vector 的性能才是最优的。
vector 的特点:(1) 指定一块如同数组一样的连续存储,但空间可以动态扩展。
即它可以像数组一样操作,并且可以进行动态操作。
通常体现在push_back() pop_back() 。
(2) 随机访问方便,它像数组一样被访问,即支持[ ] 操作符和vector.at()(3) 节省空间,因为它是连续存储,在存储数据的区域都是没有被浪费的,但是要明确一点vector 大多情况下并不是满存的,在未存储的区域实际是浪费的。
(4) 在内部进行插入、删除操作效率非常低,这样的操作基本上是被禁止的。
Vector 被设计成只能在后端进行追加和删除操作,其原因是vector 内部的实现是按照顺序表的原理。
(5) 只能在vector 的最后进行push 和pop ,不能在vector 的头进行push 和pop 。
(6) 当动态添加的数据超过vector 默认分配的大小时要进行内存的重新分配、拷贝与释放,这个操作非常消耗性能。
所以要vector 达到最优的性能,最好在创建vector 时就指定其空间大小。
双向链表list是一个线性链表结构,它的数据由若干个节点构成,每一个节点都包括一个信息块(即实际存储的数据)、一个前驱指针和一个后驱指针。
它无需分配指定的内存大小且可以任意伸缩,这是因为它存储在非连续的内存空间中,并且由指针将有序的元素链接起来。
由于其结构的原因,list 随机检索的性能非常的不好,因为它不像vector 那样直接找到元素的地址,而是要从头一个一个的顺序查找,这样目标元素越靠后,它的检索时间就越长。
检索时间与目标元素的位置成正比。
虽然随机检索的速度不够快,但是它可以迅速地在任何节点进行插入和删除操作。
因为list 的每个节点保存着它在链表中的位置,插入或删除一个元素仅对最多三个元素有所影响,不像vector 会对操作点之后的所有元素的存储地址都有所影响,这一点是vector 不可比拟的。
list 的特点:(1) 不使用连续的内存空间这样可以随意地进行动态操作;(2) 可以在内部任何位置快速地插入或删除,当然也可以在两端进行push 和pop 。
(3) 不能进行内部的随机访问,即不支持[ ] 操作符和vector.at() ;(4) 相对于verctor 占用更多的内存。
双端队列deque是一种优化了的、对序列两端元素进行添加和删除操作的基本序列容器。
它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结构中保存对这些块及其顺序的跟踪。
向deque 两端添加或删除元素的开销很小。
它不需要重新分配空间,所以向末端增加元素比vector 更有效。
实际上,deque 是对vector 和list 优缺点的结合,它是处于两者之间的一种容器。
deque 的特点:(1) 随机访问方便,即支持[ ] 操作符和vector.at() ,但性能没有vector 好;(2) 可以在内部进行插入和删除操作,但性能不及list ;(3) 可以在两端进行push 、pop ;三者的比较下图(原文中没看到,不过容易想象)描述了vector 、list 、deque 在内存结构上的特点:vector 是一段连续的内存块,而deque 是多个连续的内存块,list 是所有数据元素分开保存,可以是任何两个元素没有连续。
vector 的查询性能最好,并且在末端增加数据也很好,除非它重新申请内存段;适合高效地随机存储。
list 是一个链表,任何一个元素都可以是不连续的,但它都有两个指向上一元素和下一元素的指针。
所以它对插入、删除元素性能是最好的,而查询性能非常差;适合大量地插入和删除操作而不关心随机存取的需求。
deque 是介于两者之间,它兼顾了数组和链表的优点,它是分块的链表和多个数组的联合。
所以它有被list 好的查询性能,有被vector 好的插入、删除性能。
如果你需要随即存取又关心两端数据的插入和删除,那么deque 是最佳之选。
关联容器set, multiset, map, multimap 是一种非线性的树结构,具体的说采用的是一种比较高效的特殊的平衡检索二叉树——红黑树结构。
(至于什么是红黑树,我也不太理解,只能理解到它是一种二叉树结构)因为关联容器的这四种容器类都使用同一原理,所以他们核心的算法是一致的,但是它们在应用上又有一些差别,先描述一下它们之间的差别。
set ,又称集合,实际上就是一组元素的集合,但其中所包含的元素的值是唯一的,且是按一定顺序排列的,集合中的每个元素被称作集合中的实例。
因为其内部是通过链表的方式来组织,所以在插入的时候比vector 快,但在查找和末尾添加上被vector 慢。
multiset ,是多重集合,其实现方式和set 是相似的,只是它不要求集合中的元素是唯一的,也就是说集合中的同一个元素可以出现多次。
map ,提供一种“键- 值”关系的一对一的数据存储能力。
其“键”在容器中不可重复,且按一定顺序排列(其实我们可以将set 也看成是一种键- 值关系的存储,只是它只有键没有值。
它是map 的一种特殊形式)。
由于其是按链表的方式存储,它也继承了链表的优缺点。
multimap ,和map 的原理基本相似,它允许“键”在容器中可以不唯一。
关联容器的特点是明显的,相对于顺序容器,有以下几个主要特点:1,其内部实现是采用非线性的二叉树结构,具体的说是红黑树的结构原理实现的;2,set 和map 保证了元素的唯一性,mulset 和mulmap 扩展了这一属性,可以允许元素不唯一;3,元素是有序的集合,默认在插入的时候按升序排列。
基于以上特点,1,关联容器对元素的插入和删除操作比vector 要快,因为vector 是顺序存储,而关联容器是链式存储;比list 要慢,是因为即使它们同是链式结构,但list 是线性的,而关联容器是二叉树结构,其改变一个元素涉及到其它元素的变动比list 要多,并且它是排序的,每次插入和删除都需要对元素重新排序;2,关联容器对元素的检索操作比vector 慢,但是比list 要快很多。
vector 是顺序的连续存储,当然是比不上的,但相对链式的list 要快很多是因为list 是逐个搜索,它搜索的时间是跟容器的大小成正比,而关联容器查找的复杂度基本是Log(N) ,比如如果有1000 个记录,最多查找10 次,1,000,000 个记录,最多查找20 次。