STL有6种序列容器类型.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1.?STL有6种序列容器类型 (1)vector 它提供对元素的随即访问,在尾部添加和删除元素的时间是固定的,在头部或中部插 入和删除元素的复杂度为线性时间。 (2)deque 在deque文件中声明。 是双端队列,支持随即访问。从deque的开始与末尾位置插入和删除元素的时间是固 定的。 尽管vector和deque都提供对元素的随机访问和在序列中部执行线性时间的插入和删 除操作,但vector容器执行这些操作时速度更快一些。 (3)list 是双向链表,插入删除元素时间固定。不支持随机访问。 与vector不同是,当向容器中插入或删除元素后,链表迭代器指向元素将不变。 解释一下:如果一个vector有5个元素,中间插入一个,那么第五个元素包含的值将 是以前第四个元素的值,因此,迭代器指向的位置不变,但是数据不同。然而,在链 表中插入新元素并不会移动已有的元素,而只是修改链接信息。指向某个元素的迭代 器仍然指向该元素,也就是值相同,链接的位置不同了。 (4)queue 在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.随机访问迭代器 随机访问迭代器具有双向迭代器的所有特性,同时添加了支持随机访问的操作和用于 对元素进行排序的关系操作符。(就是可以比较指针的大

文档评论(0)

ktj823 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档