ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:19.55KB ,
资源ID:2828809      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2828809.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(11C第十一章习题解答.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

11C第十一章习题解答.docx

1、11C第十一章习题解答第十一章 标准模板库(STL)习题一. 大体概念与基础知识自测题11.1填空题11.1.1 STL大量利用继承和虚函数是 (1) (填对或错)。因为 (2) 。答案:(1)错(2)它利用的是模板技术,追求的是运行的效率,幸免了虚函数的开销11.1.2 有两种STL容器: (1) 和 (2) 。STL不用new和delete,而用 (3) 实现各类操纵内存分派和释放的方式。答案:(1)第一类容器(2)近容器(3)分派子(allocator)11.1.3 五种要紧迭代子类型为 (1) 、 (2) 、 (3) 、 (4) 和 (5) 。STL算法用 (6) 间接操作容器元素。s

2、ort算法要求用 (7) 迭代子。答案:(1)输入(InputIterator)(2)输出(OutputIterator)(3)正向(ForwardIterator)(4)双向(BidirectionalIterator)(5)随机访问(RandomAccessIterator)(6)迭代子(7)随机访问(RandomAccessIterator)11.1.4 三种STL容器适配器是 (1) 、 (2) 和 (3) 。答案:(1)stack(栈)(2)queue(队列)(3)priority_queue(优先级队列)11.1.5 成员函数end()取得容器 (1) 的位置,而rend取得容器

3、(2) 的位置。算法通常返回 (3) 。答案:(1)最后一个元素的后继位置(2)引用容器第一个元素的前导位置。事实上这是该容器前后反转以后的end()(3)迭代子11.1.6 适配器是 (1) ,它依附于一个 (2) 容器上,它没有自己的 (3) 函数和 (4) 函数,而借用其实现类的对应函数。答案:(1)不独立的(2)顺序(3)构造函数(4)析构函数11.1.7 返回布尔值的函数对象称为 (1) ,默许的是 (2) 操作符。答案:(1)谓词(predicate)(2)小于比较操作符“”11.1.8C+标准库中给出的泛型算法包括 (1) 种算法。要紧包括以下几类: (2) 、 (3) 、 (4

4、) ,每一类都有十种以上算法。答案:(1)70余(2)查找算法(3)排序(sorting)和通用整序(ordering)算法(4)删除和代替算法11.2简答题11.2.1简述STL中迭代子与C+指针的关系与异同点。答:迭代子包括内存地址的取得,是面向对象版本的指针。 迭代子与指针有许多相同的地方,但迭代子保留所操作的特定容器需要的状态信息,从而实现与每种容器类型相适应的迭代子。而且有些迭代子操作在所有容器中是一致的,这带来了专门大的方便。如+运算符老是返回容器下一个元素的迭代子,就像数组指针+后指向下一个元素;间接引用符“*”,老是表示迭代子指向的容器元素,就像数组指针加*号后代表指针所指的元

5、素。 迭代子在STL中起粘结剂的作用,用来将STL的各部份结合在一路。从本质上说,STL提供的所有算法都是模板,咱们能够通过利用自己指定的迭代子来对这些模板实例化。 迭代子能够包括指针,但迭代子又不仅是一个指针。11.2.2顺序容器包括哪三种?它们各以什么数据结构为基础?各有哪些特点?答:C+标准模板库提供三种顺序容器:vector,list和deque。vector类和deque类是以数组为基础的,list类是以双向链表为基础的。矢量(vector)类提供了具有持续内存地址的数据结构。它和C/C+的数组一样通过下标运算符 直接有效地访问矢量的任何元素。与数组不同,vector的内存用尽时,v

6、ector自动分派更大的持续内存区,将原先的元素复制到新的内存区,并释放旧的内存区。内存分派由分派子(allocator)完成。 矢量能够用来实现队列、堆栈、列表和其他更复杂的结构。 vector支持随机访问迭代子,具有最强的功能。vector的迭代子通常实现为vector元素的指针。列表(list)是由双向链表(doubly linked list)组成的。支持的迭代子类型为双向迭代子。双端队列(deque)(double-ended queue)类。双端队列许诺在队列的两头进行操作。它是以顺序表为基础的,因此它能利用下标提供有效的索引访问,它支持随机访问迭代子。它放松了访问的限制,对象既可

7、从队首进队,也能够从队尾进队,一样也可从任一端出队。而且除可从队首和队尾移走对象外,也支持通过利用下标操作符“ ”进行访问。 当要增加双端队列的存储空间时,能够在内存块中对deque两头别离进行分派。而且新分派的存储空间保留为指向这些块的指针数组,如此双端队列能够利用不持续内存空间。因此它的迭代子比vector的迭代子加倍智能化。为双端队列分派的存储块,往往要等删除双端队列时才释放,它比重复分派(再分派和释放)更有效,但也更浪费内存。利用双端队列容器类来实现矢量容器类所能实现的各类数据结构要更灵活,方便。11.2.3关联容器有哪四种?简单介绍它们是如何组成的?各有什么特点?答:四个关联容器为:

8、集合(set),多重集合(multiset),映射(map)和多重映射(multimap)。集合和多重集合类提供了操纵数值集合的操作,其中数值是关键字,即没必要还有一组值与每一个关键字相关联。集合与多重集合类的要紧不同在于多重集合许诺重复的关键字(key),而集合不许诺重复的关键字。集合和多重集合通常实现为红黑二叉排序树。元素的顺序由比较器函数对象(comparator function object)确信。如对整型multiset,只要用比较器函数对象less排序关键字,元素即可按升序排列。映射和多重映射类提供了操作与关键字相关联的映射值(mapped value)的方式。映射和多重映射的要

9、紧不同在于多重映射许诺寄存与映射值相关联的重复关键字,而映射只许诺寄存与映射值一一对应的单一关键字。多重集合关联容器用于快速存储和读取关键字。多重映射和映射关联容器类用于快速存储和读取关键字与相关值(关键字/数值对,key/value pair)。11.2.4什么是函数对象?它通经常使用在什么地址?答:函数对象是一个类,它重载了函数挪用操作符(operator())。该操作符封装了应该被实现为一个函数的操作。典型情形下,函数对象被作为实参传递给泛型算法,以完全解决类型依托性的问题。和“引用”一样,“函数对象”很少独立利用。函数对象与函数指针相较较有三个优势:第一,函数指针是间接引用,不能作为内

10、联函数,而函数对象能够,如此速度更快;第二,类有数据域,函数对象能够拥有任意数量的额外数据,用这些数据能够用来缓冲当前数据和结果,提高运行质量;第三,编译时对函数对象作类型检查。11.2.5泛型算法函数名加有后缀_if是什么意思?而加有后缀_copy又代表什么意思?答:_if 表示函数采纳的操作是在元素上(知足给定谓词),而不是对元素的值本身进行操作。如find_if算法表示:在容器指定范围中查找一些特点知足函数指定条件的(知足给定谓词)元素,也确实是使某一函数对象返回值第一次为真的元素。例如;小于特定值的第一个元素。而find查找含特定值的第一个元素。_copy 表示算法不仅操作元素的值,而

11、且还把修改的值复制到一个目标范围中。如reverser算法倒置范围中元素的排列顺序,而reverse_copy算法同时把结果复制到目标范围中。二. 编程题与综合练习题11.3编程测试顺序容器矢量(vector)的要紧功能和利用方式。(参考附录C,下同)解:#include#include#include#includeusing namespace std;int main() ostream_iteratoroutput(cout, ); /用输出迭代子output来输出,其中第二参数 表示用空格分隔各个整数。 int ia18=47,29,5,37,13,23,11,61,7,31,41,

12、2,59,19,17,53,43,3; vector vec(ia,ia+9); /数据填入vector;vector共有7个构造函数,经常使用3个 /vector(),用以声明空的vector;vector(n),用以声明有n个元素的vector; /vector(first,last),用以声明一个vector, /其元素的初值是从区间first,last)所指定的序列中的元素复制而来的; vector vec2(18); if() coutvector空endl; else coutvector不空,vector中的元素:endl; unique_copy(),(),output); c

13、outendl; cout当前分派元素空间数量:()endl; (12); cout当前为vector保留的最小分派元素空间数量:()endl; (),(); cout当前分派元素空间数量:()endl; (10);cout当前从头分派元素空间数量为10,实际分派元素空间数量: ()endl; (ia+10,ia+16); coutvector寄存序列允许最大长度:size()endl; coutvector中的元素:endl; unique_copy(),(),output); coutendl; (ia,ia+18); coutvector中的元素:endl; unique_copy(),

14、(),output); coutendl; sort(),(),greater();/降序排列 coutvector中的元素:endl; unique_copy(),(),output); coutendl; cout用反转迭代子输出vector中的元素:endl; unique_copy(),(),output); coutendl;cout第1个元素:()endl; cout最后1个元素:()endl; cout第8个元素:vec6endl; cout原vector2中的元素:endl; unique_copy(vec2.begin(),vec2.end(),output); couten

15、dl; vec2.swap(vec); cout互换后vector2中的元素:endl; unique_copy(vec2.begin(),vec2.end(),output); coutendl; return 0;11.4编程测试顺序容器列表(list)的要紧功能和利用方式。解:#include#include#include#includeusing namespace std;int main() ostream_iteratoroutput(cout, ); /用输出迭代子output来输出,其中第二参数 表示用空格分隔各个整数。 int ia18=47,29,5,37,13,23,

16、11,61,7,31,41,2,59,19,17,53,43,3; list list1(ia,ia+18); /数据填入list1;list共有7个构造函数,经常使用3个 /list(),用以声明空的list;list(n),用以声明有n个元素的list; /list(first,last),用以声明一个list, /其元素的初值是从区间first,last)所指定的序列中的元素复制而来的; list list2(18); if(list1.empty() coutlist1空endl; else coutlist1不空,list1中的元素:endl; unique_copy(list1.b

17、egin(),list1.end(),output); coutendl; list1.sort(greater();/降序排列 coutlist1中的元素降序排列:endl; unique_copy(list1.begin(),list1.end(),output); coutendl; cout用反转迭代子输出list1中的元素:endl; unique_copy(list1.rbegin(),list1.rend(),output); coutendl;cout第1个元素:list1.front()endl; cout最后1个元素:list1.back()endl; cout原list2

18、中的元素:endl; unique_copy(list2.begin(),list2.end(),output); coutendl; list2.swap(list1); cout互换后list2中的元素:endl; unique_copy(list2.begin(),list2.end(),output); coutendl; cout现list1中的元素空了:endl; unique_copy(list1.begin(),list1.end(),output); coutendl; list1.assign(list2.begin(),list2.end(); cout将list2的元素

19、赋到list1中:endl; unique_copy(list1.begin(),list1.end(),output); coutendl; list2.resize(10); coutlist2中的元素应剩10个:endl; unique_copy(list2.begin(),list2.end(),output); coutendl;back(); cout现list1中的元素:endl; unique_copy(list1.begin(),list1.end(),output); coutendl;front(); cout现list1中的元素:endl; unique_copy(li

20、st1.begin(),list1.end(),output); coutendl;back(ia17); cout因原list1中最后的元素与新插入元素相同,未能真正插入:endl; unique_copy(list1.begin(),list1.end(),output); coutendl;front(ia0); cout现list1中的元素:endl; unique_copy(list1.begin(),list1.end(),output); coutendl; return 0;11.5编程测试以双向队列(deque)为基础的容器适配器队列(queue)的要紧功能和利用方式。解:#

21、include#include#includeusing namespace std;int main() int i,j; double da10=3.1,4.2,84.5,18.3,6.8,5.9,8.3,22.8,1.23,4.7; queue que1; for(i=0;i10;i+) que1.push(dai); for(i=0;i10;i+) coutque1.front()t; que1.pop(); coutendl; return 0;11.6利用映射(map),成立阿拉伯的数字09和英文单词Zero到Nine的映射关系,并输入阿拉伯数字(如:1),输出英文数字(如:One

22、)。解:#include#includeusing namespace std;typedef map ismap;int main() int i=1,j; char* str10=one,two,three,fore,five,six,sever,eight,nine,ten; ismap trans_map1; ismap:iterator it; for(i=1;i=10;i+) trans_map1.insert(ismap:value_type(i,stri-1); for(it=trans_map1.begin();it!=trans_map1.end();it+) cout(*it).firstt(*it).secondendl; couttrans_map1.size()endl; cout请输入110的数字:j; it=trans_map1.find(j); cout(*it).firstt(*it).secondendl; return 0;

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2