这一篇知识会给农友们说明一下“杀虫剂的容器属于哪类的”的内容进行周密介绍,期望对各位农资人们有一点帮助,下面一起来看看吧!
1、苍蝇蚊子药的配制方法?您好,苍蝇蚊子药的配制方法有很多种,以下是其中一种常见的配制方法:
材料:
-硼砂粉:50克
-粉状石灰:50克
-小苏打:50克
-酿酒曲:50克
-白糖:100克
-水:适量
步骤:
1.将硼砂粉、粉状石灰、小苏打和酿酒曲混合在一起,搅拌均匀。
2.将白糖加入到混合物中,继续搅拌均匀。
3.慢慢加入适量的水,搅拌成糊状。
4.将糊状物放置在室内角落、厨房、卫生间等蚊蝇密集的地方。
5.蚊蝇会被糊状物吸引过去,陷入其中无法脱身,从而达到防蚊蝇的目的。
需要注意的是,配制和使用任何药物都应遵循安全操作和使用方法,避免对人体和环境产生不良影响。
2、有害回收垃圾有哪些?有害垃圾包括以下:
电池类:纽扣电池、充电电池,普通干电池达到国家低汞或无汞技术要求,现作为其他垃圾投放。
含汞类:废荧光灯管、废节能灯、废水银温度计、废水银血压计、荧光棒等。
废药类:过期药品为有害垃圾,装药片的瓶子可以根据材质作为可回收物投放。
油漆类:废油漆、废农药、杀虫剂等,残余液体需和容器一起作为有害垃圾投放
3、So垃圾分类概括?1、可回收垃圾
指再生利用价值较高,能进入废品回收渠道的垃圾。
主要包括:纸类(报纸、**、杂志、旧书、纸板箱及其它未受污染的纸制品等)、金属(铁、铜、铝等制品)、玻璃(玻璃瓶罐、平板玻璃及其他玻璃制品)、除塑料袋外的塑料制品(泡沫塑料、塑料瓶、硬塑料等)、橡胶及橡胶制品、牛**盒等利乐包装、饮料瓶(可乐罐、塑料饮料瓶、啤酒瓶等)等。
2、有害垃圾
含有有毒有害化学物质的垃圾。
主要包括:电池(蓄电池、钮扣电池等)、废旧电子产品、废旧灯管灯泡、过期药品、过期日用化妆品、染发剂、杀虫剂容器、除草剂容器、废弃水银温度计、废油漆桶、废打印机墨盒、硒鼓等。有害垃圾主要的处理途径:安全填埋、焚烧。
3、厨余垃圾
厨房产生的食物类垃圾以及果皮等。
主要包括:剩菜剩饭与西餐糕点等食物残余、菜梗菜叶、动物骨骼内脏、茶叶渣、水果残余、果壳瓜皮、盆景等植物的残枝落叶、废弃食用油等。厨余垃圾主要的处理途径:堆肥、制作饲料。
4、其它垃圾
除去可回收物、有害垃圾、厨余垃圾之外的所有垃圾的总称。
主要包括:受污染与无法再生的纸张(纸杯、照片、复写纸、压敏纸、收据用纸、明星片、相册、卫生纸、**片等)、受污染或其他不可回收的玻璃、塑料袋与其他受污染的塑料制品、废旧衣物与其他纺织品、破旧陶瓷品、妇女卫生用品、一次性餐具、贝壳、烟头、灰土等。
其它垃圾主要的处理途径:可燃部分焚烧发电,不可燃部分卫生填埋。
扩展资料:
垃圾分类的意义
1、将易腐有机成分为主的厨房垃圾单独分类,为垃圾堆肥提供优质原料,生产处优质有机肥,有利于改善土壤肥力,减少化肥施用量。
2、将高含水率的厨房垃圾分离,提高了其他垃圾的焚烧热值,降低了垃圾焚烧二次污染控制难度。
3、将有害垃圾分类出来,减少了垃圾中的重金属、有机污染物、致病菌的含量,有利于垃圾的无害化处理,减少了垃圾处理的水、土壤、大气污染风险。
4、将不同类别的垃圾进行了分流、使最终进入卫生填埋的量大大减少,延长了填埋场的使用寿命。
5、提高了废品回收利用比例,减少了原材料的需求,减少二氧化碳的排放。
6、普及环保与垃圾的知识,提升全社会对环卫行业的认知,减少环卫工人的工作难度,形成尊重、关心环卫工人的氛围。
4、如何去除杀虫剂残留?去除杀虫剂残留的方法:
1、碱水浸泡法
先将蔬菜水果表面冲洗干净,在碱水中浸泡5~10分钟,然后用清水冲洗2~3遍。
2、臭氧洗脱法
用市售的臭氧或臭氧发生器清洗和浸泡各类瓜果蔬菜。清洗和浸泡时间为10~20分钟,可清除大部分农药残留。
3、储存法
部分农药可随时间流逝缓慢地分解为对人体无害的物质,因此对易于保存的瓜果蔬菜可通过一定时间的存放而减少农药残留量。此法适用于苹果、冬瓜等不易腐烂的水果蔬菜。这类水果蔬菜一般存放15天以上,即可去除大部分农药残留。
4、加热法
氨基甲酸酯类杀虫剂会随温度升高而加快分解,因此可通过加热去除部分农药残留。此法可用于芹菜、菠菜、小白菜、圆白菜、青椒、菜花、豆角等。先用清水将蔬菜表面洗净,再放入沸水中焯2~5分钟,再用清水冲洗1~2遍即可。
扩展资料:
如何减少杀虫剂危害
1、多买有机食品。有机农产品检测到的杀虫剂含量远低于常规种植的食品。至少**易残留农药的农产品(如草莓、菠菜、油桃和苹果)时,尽量选购有机的。
2、彻底清洗果蔬。把水果或蔬菜放在流动的水下面冲洗,能比浸泡更有效地去除残余农药。
3、进屋要换鞋。在户外,鞋底会沾满杀虫剂的残余物,进门前换上室内鞋是最有效的办法。
4、按要求使用。在室内使用杀虫剂,要戴手套和口罩,喷洒完毕离开房间,半个小时后打开门窗散味。
5、提防抗菌产品。一些抗菌产品能杀死或减缓细菌和病毒等微生物的传播,在冬天、流感季尤为重要。它们也可能含有杀虫剂的成分。
6、正确储存。不要把杀虫剂转移到另外的容器中,有些易燃产品要避光,储存在阴凉处,以避免泄漏。
7、控制使用量。蟑螂、蚂蚁等害虫很难根除,但也不要随意用杀虫剂。建议密封食物,经常清洗厨房、厕所,堵死它们的入口。
参考资料来源:
人民健康网--如何减少杀虫剂危害
参考资料来源:
人民健康网--如何清除农药残留
5、甲醇的结构简式怎么写?
甲醇:分子式:CH4O,结构简式:CH3OH,
乙醇:分子式:C2H6O,结构简式:C2H5OH。
甲醇
甲醇(Methanol)又称羟基甲烷,是一种有机化合物,有毒。是结构最为简单的饱和一元醇。其化学式为CH3OH/CH4O,其中CH3OH是结构简式,能突出甲醇的羟基,CAS号为67-56-1,分子量为32.04,沸点为64.7℃。因在干馏木材中首次发现,故又称“木醇”或“木精”。人口服中毒最低剂量约为100mg/kg体重,经口摄入0.3~1g/kg可致死。用于制造甲醛和农药等,并用作有机物的萃取剂和酒精的变性剂等。成品通常由一氧化碳与氢气反应制得。
中文名
甲醇
外文名
methanol
别名
羟基甲烷、木醇、木精
化学式
结构简式CH3OH;分子式CH4O
分子量
32.04
制备方法应用领域安全措施
理化性质
物理性质
1.性状:无色透明液体,有**性气味。
2.熔点(℃):-97.8
3.沸点(℃):64.7
4.相对密度(水=1):0.79
5.相对蒸气密度(空气=1):1.1
6.饱和蒸气压(kPa):12.3(20℃)
7.燃烧热(kJ/mol):723
8.临界温度(℃):240
9.临界压力(MPa):7.95
10.辛醇/水分配系数:-0.82~-0.77
11.闪点(℃):8(CC);12.2(OC)
12.自燃温度(℃):436
13.爆炸上限(%):36.5
14.爆炸下限(%):6
15.溶解性:与水互溶,可混溶于醇类、**等多数有机溶剂。
16.折射率(N/D,20℃):1.3284
17.黏度(mPa·s,25℃):0.5525
18.蒸发热(KJ/mol,b.p.):35.32
19.熔化热(KJ/kg):98.81
20.比热容:KJ/(kg·K),20℃,定压:2.51
21.沸点上升常数:0.785
22.电导率(S/m,25℃):1.5×10-9
23.热导率(W/(m·K),30℃):21.3527
24.体膨胀系数(K,20℃):0.00119
25.临界密度(g/cm):0.273
26.临界体积(cm/mol):117
27.临界压缩因子:0.223
28.偏心因子:0.566
29.Lennard-Jones参数:3.8632(A);419.86(K)
30.溶度参数(J/cm):29.532
31.vanderWaals体积(cm/mol):21.710
32.气相标准燃烧热(焓)(kJ/mol):764.9
33.气相标准生成热(焓)(kJ/mol):-201.5
34.气相标准熵(J·mol-1/K):239.88
35.气相标准生成自由能(kJ/mol):-161.6
36.气相标准热熔(J·mol-1/K):44.06
37.液相标准燃烧热(焓)(kJ/mol):-726.9
38.液相标准生成热(焓)(kJ/mol):-239.1
39.液相标准熵(J·mol-1/K):127.24
40.液相标准生成自由能(kJ/mol):-166.88
41.液相标准热熔(J·mol-1/K):81.4[1]
化学性质
甲醇由甲基和羟基组成的,具有醇所具有的化学性质。
甲醇可以与氟气、氧气等气体发生反应,在纯氧中剧烈燃烧,生成水蒸气和二氧化碳
2CH3OH+3O2=2CO2+4H2O
而且,甲醇还可以发生氨化反应(370℃~420℃)
NH3+CH3OH→CH3NH2+H2O
NH3+2CH3OH→(CH3)2NH+2H2O
NH3+3CH3OH→(CH3)3N+3H2O
甲醇也可在空气中燃烧:2CH4O+3O2=燃烧=2CO2+4H2O
甲醇具有饱和一元醇的通性,由于只有一个碳原子,因此有其特有的反应。例如
①与氯化钙形成结晶状物质CaCl2·4CH3OH,与氧化钡形成BaO·2CH3OH的分子化合物并溶解于甲醇中;类似的化合物有MgCl2·6CH3OH、CuSO4·2CH3OH、CH3OK·CH3OH、AlCl3·4CH3OH、AlCl3·6CH3OH、AlCl3·10CH3OH等
4CH3OH+CaCl2→CaCl2·4CH3OH
2CH3OH+BaO→2CH3OH·BaO
②与其他醇不同,由于-CH2OH基与氢结合,氧化时生成的甲酸进一步氧化为CO2
2CH3OH+O2→2HCHO+2H2O
2HCHO+O2→2HCOOH
2HCOOH+O2→2H2O+2CO2
③甲醇与氯、溴不易发生反应,但易与其水溶液作用,最初生成二氯甲醚(CH2Cl)2O,因水的作用转变成HCHO与HCl
2CH3OH+2Cl2=(CH2Cl)2O+H2O+2HCl
(CH2Cl)2O+H2O=2HCHO+2HCl
④与碱、石灰一起加热,产生氢气并生成甲酸钠
CH3OH+NaOH→HCOONa+2H2
⑤与锌粉一起蒸馏,发生分解,生成CO和H2O[2]
计算化学数据
1.疏水参数计算参考值(XlogP):-0.5
2.氢键供体数量:1
3.氢键受体数量:1
4.互变异构体数量:无
5.拓扑分子极性表面积20.2
6.重原子数量:2
7.复杂度:2
8.共价键单元数量:1[1]
制备方法
合成法
1.甲醇的生产,主要是合成法,合成的化学反应式为:
2H2+CO→CH3OH[3]
2.将合成后的粗甲醇,经预精馏脱除甲醚。(高压法最先实现工业合成的方法,但因其能耗大,加工复杂,材质要求苛刻,产品中副产物多,由ICI低压和中压法及Lurgi低压和中压法取代。工业上合成甲醇几乎全部采用一氧化碳加压催化加氢的方法,工艺过程包括造气、合成净化、甲醇合成和粗甲醇精馏等工序。)
3.将粗甲醇净化,净化过程包括精馏和化学处理。化学处理主要用碱破坏在精馏过程中难以分离的杂质,并调节pH值;精馏主要是脱除易挥发组分如二甲醚,以及难挥发的乙醇、高碳醇和水。粗馏后的纯度一般都可达到98%以上。
4.将工业甲醇用精馏的方法将含水量降到0.01%以下。再用次碘酸钠处理,可除去其中的丙酮。经精馏得纯品甲醇。
5.BV-Ⅲ级甲醇的制备主要采用精馏工艺。以工业甲醇为原料,经精馏、超净过滤、超净分装,得高纯甲醇产品。一般均以工业甲醇为原料,经常压蒸馏除去水分,控制塔顶64~65℃,过滤除去不溶物即可。[1]
干馏法
最早是用木材干馏法生产甲醇,故甲醇也叫木醇。其中自然游离状态的甲醇非常的少,故这种方法既浪费木材,产品又含有丙酮等杂质,并且很难除去。因为这种方法不能满足需要,1924年以后,人们开始逐渐停止使用这个方法。[4]
应用领域
1、基本有机原料之一,用于制造氯甲烷、甲胺和硫酸二甲酯等多种有机产品。也是农药(杀虫剂、杀螨剂)、医药(磺胺类、合霉素等)的原料,合成对苯二甲酸二甲酯、甲基丙烯酸甲酯和丙烯酸甲酯的原料之一。[5]
2、甲醇的主要应用领域是生产甲醛,甲醛可用来生产胶粘剂,主要用于木材加工业,其次是用作模塑料、涂料、纺织物及纸张等的处理剂。
3、甲醇另一主要用途是生产醋酸。醋酸消费约占全球甲醇需求的7%,可生产醋酸乙烯、醋酸纤维和醋酸酯等,其需求与涂料、粘合剂和纺织等方面的需求密切相关。
4、甲醇可用于制造甲酸甲酯,甲酸甲酯可用于生产甲酸、甲酰胺和其他精细化工产品,还可用作杀虫剂、杀菌剂、熏蒸剂、烟草处理剂和汽油添加剂。
5、甲醇也可制造甲胺,甲胺是一种重要的脂肪胺,以液氮和甲醇为原料,可通过加工分立为一甲胺、二甲胺、三甲胺,是基本的化工原料之一。
6、可合成为碳酸二甲酯,是一种环保产品,应用于医药、农业和特种行业等。
7、可合成为乙二醇,是石化中间原料之一,可用于生产聚酯和防冻剂。
8、可用于制造生长促进剂。可以使作物大量增产,保持枝叶鲜嫩、茁壮茂盛、在夏天也不会枯萎,可大量减少灌溉用水,有利于旱地作物的生长。
9、可合成甲醇蛋白,以甲醇为原料经微生物发酵生产的甲醇蛋白被称为第二代单细胞蛋白,与天然蛋白相比,营养价值更高,粗蛋白含量比鱼粉和大豆高得多,而且含有丰富的氨基酸、矿物质和维生素,可以代替鱼粉、大豆、骨粉、肉类和脱脂**粉。[6]
10、甲醇用作清洗去油剂,MOS级主要用于分立器件,中、大规模集成电路,BV-Ⅲ级主要用于超大规模集成电路工艺技术。
11、用作分析试剂,如作溶剂、甲基化试剂、色谱分析试剂。还用于有机合成。
12、通常甲醇是一种比乙醇更好的溶剂,可以溶解许多无机盐。亦可掺入汽油作替代燃料使用。20世纪80年代以来,甲醇用于生产汽油辛烷值添加剂甲基叔丁基醚、甲醇汽油、甲醇燃料,以及甲醇蛋白等产品,促进了甲醇生产的发展和市场需要。
13、甲醇不仅是重要的化工原料,而且还是性能优良的能源和车用燃料。甲醇与异丁烯反应得到MTBE(甲基叔丁基醚),它是高辛烷值无铅汽油添加剂,亦可用作溶剂。除此之外,还可制烯烃和丙烯,解决资源短缺问题。
14、甲醇可用于生产二甲醚,二甲醚除了在日用化工、制药、农药、染料、涂料等方面有广泛的用途,还具有方便清洁、十六烷值高、动力性能好、污染少。易加压为液体、易储存等燃料性能。甲醇和二甲醚按一定比例配制而成的新型液体燃料称为醇醚燃料。它的燃烧效率和热效率均高于液化气。[7]
安全措施
健康危害
甲醇被大众所熟知,具有毒性。工业酒精中大约含有4%的甲醇,若被不法分子当作食用酒精制作假酒,饮用后,会产生甲醇中毒。甲醇的致命剂量大约是70ml。
甲醇的毒性对人体的神经系统和**系统影响最大,它经消化道、呼吸道或皮肤摄入都会产生毒性反应,甲醇蒸气能损害人的呼吸道粘膜和视力。在甲醇生产工厂,中国有关部门规定,空气甲醇的浓度限制为PC-stel=50mg/m3,PC-TWA=25mg/m3,在有甲醇气的现场工作须戴防毒面具、工厂废水要处理后才能排放,允许含量小于200mg/L的甲醇。
甲醇的中毒机理是,甲醇经人体代谢产生甲醛和甲酸(俗称蚁酸),然后对人体产生伤害。常见的症状是,先是产生喝醉的感觉,数小时后头痛,恶心,呕吐,以及视线模糊。严重者会失明,乃至丧命。失明的原因:甲醇的代谢产物甲酸累积在眼睛部位,破坏视觉神经细胞。脑神经也会受到破坏,而产生永久性损害。甲酸进入**后,会使组织酸性越来越强,损害肾脏导致肾衰竭。[8]
毒性:属低毒毒性。
急性毒性:LD50:5628mg/kg(大鼠经口),mg/kg(兔经皮);LC50:mg/kg,4小时(大鼠吸入);人经口5~10ml,潜伏期8~36小时,致昏迷;人经口15ml,48小时内产生视网膜炎,失明;人经口30~100ml中枢神经系统严重损害,呼吸衰弱,死亡。
亚急性和慢性毒性:大鼠吸入50mg/m3,12小时/天,3个月,在8~10周内可见到气管、支气管粘膜损害,大脑皮质细胞营养障碍等。
致突变性:微生物致突变:啤酒酵母菌1**ph。DNA抑制:人类淋巴细胞300mmol/L。
生殖毒性:大鼠经口最低中毒浓度(TDL0):7500mg/kg(孕7~19天),对新生鼠行为有影响。大鼠吸入最低中毒浓度(TCL0):ppm(7小时,孕1~22天),引起肌肉骨骼、**系统和泌**系统发育异常。
接触限制
甲醇对人体有低毒,因为甲醇在人体新陈代谢中会氧化成比甲醇毒性更强的甲醛和甲酸(蚁酸)。
初期中毒症状包括心跳加速、腹痛、上吐(呕)、下泻、无胃口、头痛、晕、全身无力。严重者会神智不清、呼吸急速至衰竭。失明是最典型的症状,甲醇进入**后,会使组织酸性变强产生酸中毒,导致肾衰竭。最严重者是死亡。
仍然有不少不法商人不顾生命安全,用含有甲醇的工业酒精勾兑假酒并出售。正品酒中也有极微量的甲醇,是宿醉的原因之一。甲醇中毒可以用乙醇解毒。因为甲醇在肝脏中被酒精脱氢酶氧化成甲醛,然后形成甲酸。乙醇可以和甲醇竞争醇脱氢酶,而使人体有时间排除甲醇。
危害防治
中毒症状
身体危害:对中枢神经系统有麻醉作用;对视神经和视网膜有特殊选择作用,引起病变;可致代谢性酸中毒。
急性中毒:短时大量吸入出现轻度眼上呼吸道**症状(口服有胃肠道**症状);经一段时间潜伏期后出现头痛、头晕、乏力、眩晕、酒醉感、意识朦胧、谵妄,甚至昏迷。视神经及视网膜病变,可有视物模糊、复视等,重者失明。代谢性酸中毒时出现二氧化碳结合力下降、呼吸加速等。
慢性影响:神经衰弱综合征,植物神经功能失调,粘膜**,视力减退等。皮肤出现脱脂、皮炎等。
急救措施
皮肤接触:脱去污染的衣着,用肥皂水和清水彻底冲洗皮肤。
眼睛接触:提起眼睑,用流动清水或生理盐水冲洗,就医。
吸入:迅速脱离现场至空气新鲜处。保持呼吸道通畅。如呼吸困难,给输氧。如呼吸停止,立即进行人工呼吸,就医。
食入:饮足量温水,催吐或用清水或1%硫代硫酸钠溶液洗胃,就医。
甲醇中毒,通常可以用乙醇解毒法。其原理是,甲醇本身无毒,而代谢产物有毒,因此可以通过抑制代谢的方法来解毒。甲醇和乙醇在人体的代谢都是同一种酶,而这种酶和乙醇更具亲和力。甲醇中毒者,可以通过饮用烈性酒(酒精度通常在60度以上)的方式来缓解甲醇代谢,进而使之排出体外。而甲醇已经代谢产生的甲酸,可以通过服用小苏打(碳酸氢钠)的方式来中和。[9]
泄漏应急处理
迅速撤离泄漏污染区人员至安全区,并进行隔离,严格限制出入,切断火源。建议应急处理人员戴自给正压式呼吸器,穿防静电工作服,不要直接接触泄漏物,尽可能切断泄漏源。防止流入下水道、排洪沟等限制性空间。小量泄漏:用砂土或其它不燃材料吸附或吸收,也可以用大量水冲洗,洗水稀释后放入废水系统。大量泄漏:构筑围堤或挖坑收容,用泡沫覆盖,降低蒸气灾害。用防爆泵转移至槽车或专用收集器内,回收或运至废物处理场所处置。[9]
紧急情况概述
液体。高度易燃,其蒸气与空气混合,能形成爆炸性混合物。吞食后有毒。跟皮肤接触有毒。吸入有毒。短期暴露有严重损伤健康的危险。
GHS危险性类别
根据GB-2026化学品分类和标签规范系列标准(参阅第十五部分),该产品分类如下:易燃液体,类别2;急毒性-口服,类别3;急毒性-皮肤,类别3;急毒性-吸入,类别3;特定目标器官毒性-单次接触,类别1。
安全标志
危险运输编码:UN12303/PG2
危险品标志:易燃有毒
安全标识:S7/S16/S24/S45/S36/S37/S39
危险标识:R11/R23/R24/R25/R39
储存运输
储存注意事项
储存于阴凉、通风良好的专用库房内,远离火种、热源。库温不宜超过37℃,保持容器密封。应与氧化剂、酸类、碱金属等分开存放,切忌混储。采用防爆型照明、通风设施。禁止使用易产生火花的机械设备和工具。储区应备有泄漏应急处理设备和合适的收容材料。
运输注意事项
本品铁路运输时限使用钢制企业自备罐车装运,装运前需报有关部门批准。运输时运输车辆应配备相应品种和数量的消防器材及泄漏应急处理设备。夏季最好早晚运输。运输时所用的槽(罐)车应有接地链,槽内可设孔隔板以减少震荡产生静电。严禁与氧化剂、酸类、碱金属、食用化学品等混装混运。运输途中应防曝晒、雨淋,防高温。中途停留时应远离火种、热源、高温区。装运该物品的车辆排气管必须配备阻火装置,禁止使用易产生火花的机械设备和工具装卸。公路运输时要按规定路线行驶,勿在居民区和人口稠密区停留。铁路运输时要禁止溜放。严禁用木船、水泥船散装运输。
消防要点
主要有:抗溶性泡沫、干粉、二氧化碳、砂土等。灭火方法:尽可能将容器从火场移至空旷处。**保持火场容器冷却,直至灭火结束。处在火场中的容器若已变色或从安全泄压装置中产生声音,必须马上撤离。
什么是容器
首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种“对象”还包含了一系列处理“其它对象”的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了一个好处,就是“容器类是一种对特定代码重用问题的良好的解决方案”。
容器还有另一个特点是容器可以自行扩展。在解决问题时我们常常不知道我们需要存储多少个对象,也就是说我们不知道应该创建多大的内存空间来保存我们的对象。显然,数组在这一方面也力不从心。容器的优势就在这里,它不需要你预先告诉它你要存储多少对象,只要你创建一个容器对象,并合理的调用它所提供的方法,所有的处理细节将由容器来自身完成。它可以为你申请内存或释放内存,并且用最优的算法来执行您的命令。
容器是随着面向对象语言的诞生而提出的,容器类在面向对象语言**别重要,甚至它被认为是早期面向对象语言的基础。在现在几乎所有的面向对象的语言中也都伴随着一个容器集,在C++ 中,就是标准模板库(STL )。
和其它语言不一样,C++ 中处理容器是采用基于模板的方式。标准C++ 库中的容器提供了多种数据结构,这些数据结构可以与标准算法一起很好的工作,这为我们的软件开发提供了良好的支持!
通用容器的分类
STL 对定义的通用容器分三类:顺序性容器、关联式容器和容器适配器。
顺序性容器 是一种各元素之间有顺序关系的线性表,是一种线性结构的可序群集。顺序性容器中的每个元素均有固定的位置,除非用删除或插入的操作改变这个位置。这个位置和元素本身无关,而和操作的时间和地点有关,顺序性容器不会根据元素的特点排序而是直接保存了元素操作时的逻辑顺序。比如我们一次性对一个顺序性容器追加三个元素,这三个元素在容器中的相对位置和追加时的逻辑次序是一致的。
关联式容器 和顺序性容器不一样,关联式容器是非线性的树结构,更准确的说是二叉树结构。各元素之间没有严格的物理上的顺序关系,也就是说元素在容器中并没有保存元素置入容器时的逻辑顺序。但是关联式容器提供了另一种根据元素特点排序的功能,这样迭代器就能根据元素的特点“顺序地”获取元素。
关联式容器另一个显著的特点是它是以键值的方式来保存数据,就是说它能把关键字和值关联起来保存,而顺序性容器只能保存一种(可以认为它只保存关键字,也可以认为它只保存值)。这在下面具体的容器类中可以说明这一点。
容器适配器 是一个比较抽象的概念, C++的解释是:适配器是使一事物的行为类似于另一事物的行为的一种机制。容器适配器是让一种已存在的容器类型采用另一种不同的抽象类型的工作方式来实现的一种机制。其实仅是发生了接口转换。那么你可以把它理解为容器的容器,它实质还是一个容器,只是他不依赖于具体的标准容器类型,可以理解是容器的模版。或者把它理解为容器的接口,而适配器具体采用哪种容器类型去实现,在定义适配器的时候可以由你决定。
下表列出STL 定义的三类容器所包含的具体容器类:
标准容器类
特点
顺序性容器
vector
从后面快速的插入与删除,直接访问任何元素
deque
从前面或后面快速的插入与删除,直接访问任何元素
list
双链表,从任何地方快速插入与删除
关联容器
set
快速查找,不允许重复值
multiset
快速查找,允许重复值
map
一对多映射,基于关键字快速查找,不允许重复值
multimap
一对多映射,基于关键字快速查找,允许重复值
容器适配器
stack
后进先出
queue
先进先出
priority_queue
最高优先级元素总是第一个出列
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 次。容器越大,关联容器相对list 的优越性就越能体现;
3, 在使用上set 区别于vector,deque,list 的最大特点就是set 是内部排序的,这在查询上虽然逊色于vector ,但是却大大的强于list 。
4, 在使用上map 的功能是不可取代的,它保存了“键- 值”关系的数据,而这种键值关系采用了类数组的方式。数组是用数字类型的下标来索引元素的位置,而map 是用字符型关键字来索引元素的位置。在使用上map 也提供了一种类数组操作的方式,即它可以通过下标来检索数据,这是其他容器做不到的,当然也包括set 。(STL 中只有vector 和map 可以通过类数组的方式操作元素,即如同ele[1] 方式)
容器适配器
STL 中包含三种适配器:栈stack 、队列queue 和优先级priority_queue 。
适配器是容器的接口,它本身不能直接保存元素,它保存元素的机制是调用另一种顺序容器去实现,即可以把适配器看作“它保存一个容器,这个容器再保存所有元素”。
STL 中提供的三种适配器可以由某一种顺序容器去实现。默认下stack 和queue 基于deque 容器实现,priority_queue 则基于vector 容器实现。当然在创建一个适配器时也可以指定具体的实现容器,创建适配器时在第二个参数上指定具体的顺序容器可以覆盖适配器的默认实现。
由于适配器的特点,一个适配器不是可以由任一个顺序容器都可以实现的。
栈stack 的特点是后进先出,所以它关联的基本容器可以是任意一种顺序容器,因为这些容器类型结构都可以提供栈的操作有求,它们都提供了push_back 、pop_back 和back 操作;
队列queue 的特点是先进先出,适配器要求其关联的基础容器必须提供pop_front 操作,因此其不能建立在vector 容器上;