为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

STL有6种序列容器类型

2018-02-20 4页 doc 15KB 12阅读

用户头像

is_003124

暂无简介

举报
STL有6种序列容器类型STL有6种序列容器类型 1. STL有6种序列容器类型 (1)vector 它提供对元素的随即访问,在尾部添加和删除元素的时间是固定的,在头部或中部插 入和删除元素的复杂度为线性时间。 (2)deque 在文件中声明。 是双端队列,支持随即访问。从deque的开始与末尾位置插入和删除元素的时间是固 定的。 尽管vector和deque都提供对元素的随机访问和在序列中部执行线性时间的插入和删 除操作,但vector容器执行这些操作时速度更快一些。 (3)list 是双向链表,插入删除元素时间固定。不支持随机访...
STL有6种序列容器类型
STL有6种序列容器类型 1. STL有6种序列容器类型 (1)vector 它提供对元素的随即访问,在尾部添加和删除元素的时间是固定的,在头部或中部插 入和删除元素的复杂度为线性时间。 (2)deque 在文件中声明。 是双端队列,支持随即访问。从deque的开始与末尾位置插入和删除元素的时间是固 定的。 尽管vector和deque都提供对元素的随机访问和在序列中部执行线性时间的插入和删 除操作,但vector容器执行这些操作时速度更快一些。 (3)list 是双向链表,插入删除元素时间固定。不支持随机访问。 与vector不同是,当向容器中插入或删除元素后,链表迭代器指向元素将不变。 解释一下:如果一个vector有5个元素,中间插入一个,那么第五个元素包含的值将 是以前第四个元素的值,因此,迭代器指向的位置不变,但是数据不同。然而,在链 表中插入新元素并不会移动已有的元素,而只是修改链接信息。指向某个元素的迭代 器仍然指向该元素,也就是值相同,链接的位置不同了。 (4)queue 在头文件中声明。queue是一个适配器类,底层类默认为deque。 它不允许随机访问队列元素,甚至不允许遍历队列。 可以将元素添加到队尾,查看队尾和队首的元素的值,检查元素数目和测试队列是否 为空。 (5)priority_queue 与queue的不同是,最大的元素总是在队首,也是一个适配器类,默认的底层类是vector 。 可以修改用于确定哪个元素放在队首的比较方式,方法是提供一个可选的构造函数参 数。 (6)stack 也是一个适配器类,默认的底层实现为vector。 不允许随机访问堆栈元素,甚至不允许遍历堆栈。 可以压入到栈顶,从栈顶弹出元素,查看栈顶元素的值,检查元素数目和测试堆栈是 否为空。 2. STL有4种联合容器:set,multiset, map, multimap; 联合容器将值与关键字关联在一起,使用关键字来查找值。 关联容器的长处在于,它提供了对元素的快速访问。与序列相似,联合容器也允许插 入新元素,不过不能指定元素的插入位置。原因是联合容器通常包含用于确定数据存 放位置的算法,以便能够很快检索信息。 (1)set,multiset 前两种是在set头文件中(以前分别为set.h和multiset.h); 值的类型与关键字相同。set删除相同的元素,multiset不会。 (2)map,multimap 后两种是在map头文件中(以前分别为map.h和multimap.h)。 值的类型与关键字不同。map关键字唯一,multimap关键字不唯一。 1.输入迭代器 术语“输入”是从程序的角度说的,即来自容器的信息被视为输入,就像是来自键盘 的信息对程序来说是输入一样。因此,输入迭代器可被程序用来读取容器中的信息。 具体的说,对输入迭代器接触引用将使程序能读读取容器中的值,但不一定能让程序 修改值。因此,需要输入迭代器的算法将不会修改容器中的值。 输入迭代器必须能够访问容器中所有的值,这是通过支持++操作符来实现的。 如果将输入迭代器设置为指向容器的第一个元素,并不断的将其递增,知道到达末尾 位置,则它将一次指向容器中的每一个元素。 另外,并不能保证输入迭代器第二次遍历容器时,顺序不变。输入迭代器并递增以后 ,也不能保证其先前的值仍然可以被解除引用。 (个人理解这句话:想想键盘输入,缓冲区内的值,读过以后就没有了,即使你保存 了已经扫描过的迭代器,仍然不能重新对这个迭代器进行解除引用操作以得到他的值 )。 基于输入迭代器的任何算法都应当是单通行的,不依赖于前一次遍历时的迭代器值, 也不依赖于本次遍历中前面的迭代器值。 2.输出迭代器 输出是指用于将信息从程序传输给容器的迭代器,因此程序的输出就是容器的输入。 解除引用能让程序修改容器的值,但是不能读取。 发送到显示器上的输出就是如此,cout可以修改发送到显示器的字符流,却不能读取 屏幕上的内容。 对于单通行,只读算法,可以使用输入迭代器; 对于单通行,只写算法,可以使用输出迭代器。 3.正向迭代器 正向迭代器只使用++操作符来遍历容器,所以它每次沿容器向前移动一个元素; 不过,与输入和输出迭代器不同的是,它总是按相同的循序遍历一些列值。另外,将 正向迭代器递增后,仍然可以对前面的迭代器值解除引用,并可以得到相同的值。这 些特征使得多次通行算法成为可能。 正向迭代器既可以似的能够读取和修改数据,也可以似的只能读取数据。 4.双向迭代器 它具有正向迭代器的所有特征,同时支持--操作符。 5.随机访问迭代器 随机访问迭代器具有双向迭代器的所有特性,同时添加了支持随机访问的操作和用于 对元素进行排序的关系操作符。(就是可以比较指针的大小) 注意:各种迭代器的类型并不是确定的,而只是一种概念性的描述。不能用面向对象 的语言来表达迭代器的种类,迭代器的种类只是一系列的要求,而不是一种类型(类 )。在STL中,用概念一词来描述这一系列要求。因此,有输入迭代器概念和双向迭 代器概念,但是却没有输入迭代器类型和双向迭代器类型。 STL有一个使用方便的预定义迭代器集合,其中包括正向迭代器、反向迭代器、插入 器和流迭代器还不是十分理解上面这段话的意思,恩,需要进一步了解预定义迭代器跟上面的5种迭代器的关系
/
本文档为【STL有6种序列容器类型】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索