文档详情

初级c,,,编写一个使用类模板对数组进行排序,查找并求元素和的程序.doc

发布:2017-06-17约1.36万字共29页下载文档
文本预览下载声明
初级c,,,编写一个使用类模板对数组进行排序,查找并求元素和的程序 篇一:第七章作业内容(修改后带部分答案) 一. 选择题 1. 下列关于类模板中模板参数的叙述中,错误的是(D) A.模板参数可以作为数据成员的类型 B.模板参数可以作为成员函数的返回类型 C.模板参数可以作为成员函数的参数类型 D.模板参数不能作为成员函数的局部变量类型 2. 假设定义如下函数模板: templatelt;class T T max(T x,T y) {return(xy)?x:y;} 并定义了int i=3;char c=?a?;语句,正确的调用语句是:(D) A.max(“li”, ”Zhang”); B. max(int(i), c); C. max(i, c); D. maxlt;int(c, i); 3. 下列程序段中有错的是(B) template lt;class type1, typename type2 //A int i;// B myfunc(type1 x,type2 y)//C { coutlt;lt;xlt;lt; lt;lt;ylt;lt;endl;}//D 4.下列关于类模板的说法中,正确的是(B) A. 在类模板外定义成员函数时,其成员函数和普通类成员函数的定义是一样的 B. 在类模板外定义成员函数时,其成员函数前面必须包含模板参数的声明 C. 类模板只能声明一个参数 D. 类模板和函数模板一样,它的参数不可以具有默认值 5.(选作题)下列不是顺序容器的是(D) A. vectorB. listC .deque D. map 6.(选作题)有如下定义:int ia[7]={0,1,1,2,3,5,8};,下面(D)是错误的 A. vectorlt;vectorlt;intivec; B. vectorlt;intivec={0,1,1,2,3,5,8}; C. vectorlt;intivec(ia,ia+7); D. vectorlt;stringsvec=ivec; 7.一个(C )允许用户为类定义一种模式,使得类中的某些数据成员及某些成员函数的返回值能去任意类型。 A.函数模板B.模板函数C. 类模板D.模板类 二. 问答题 1.简述函数模板与模板函数、类模板与模板类的区别。 答:函数模板就是实现数据类型参数化的函数定义,得到一个函数族。当函数中的数据成员、函数的返回值类型需要用未知类型进行抽象时,就需要定义函数模板,而模板函数是指在函数模板中需要使用函数时,用实际数据类型对类型参数自动实例化得到;函数模板是模板的定义,定义中用到通用类型参数,它代表的是一类函数。而模板函数是实实在在的函数定义,它在编译系统遇到具体的函数调用时生成并具有代码,用来表示某一个具体函数。 类模板如同函数模板一样,就是实现数据类型参数化的类定义,得到一个类族。在需要定义对象时,首先显式地将类模板中的类型参数实例化得到一个具体的类,这就是模板类。类模 板与模板类之间是抽象与具体的关系,类模板是诸多拥有相同数据成员和成员函数的类在类型上加以抽象得到的类族,而模板类是类模板中的类型参数实例化以后得到的一个具体的类。 2.(选作题)数组和向量的主要区别是什么? 答:(1)声明方式不同。(2)向量可以使用赋值运算符、比较运算符。(3)可以用size()来测试向量中的元素个数。(4)向量可以用at()进行有效索引测试,无合法元素则抛出异常。 3.(选作题)关联容器有哪四种?简单介绍它们是怎样组成的?各有什么特点? 答:四个关联容器为:集合(set),多重集合(multiset),映射(map)和多重映射(multimap)。 集合和多重集合类提供了控制数值集合的操作,其中数值是关键字,即不必另有一组值与每个关键字相关联。集合与多重集合类的主要差别在于多重集合允许重复的关键字(key),而集合不允许重复的关键字。集合和多重集合通常实现为红黑二叉排序树。元素的顺序由比较器函数对象(comparator function object)确定。如对整型multiset,只要用比较器函数对象lesslt;int排序关键字,元素即可按升序排列。 映射和多重映射类提供了操作与关键字相关联的映射值(mapped value)的方法。映射和多重映射的主要差别在于多重映射允许存放与映射值相关联的重复关键字,而映射只允许存放与映射值一一对应的单一关键字。 多重集合关联容器用于快速存储和读取关键字。多重映射和映射关联容器类用于快速存储和读取关键字与相关值(关键字/数值对,key/value pair)。 4.函数模板与同名的非模板函数重载时,调用的顺序是怎样的?
显示全部
相似文档