1、实验 8 模板1、 实验目的和要求: 理解函数模板、类模板 应用模板函数、模板类2、 实验内容一、基本概念题1、 下列对模板的声明,正确的是_。 A)template B)template C)template D)template 2、 一个_允许用户为类定义一种模式,使得类中的某些数据成员及某些成员函数的返回值能取任意类型。 A)函数模板 B)模板甲数 C)类模板 D)模板类 3、 类模板的模板参数_。 A)只可作为数据成员的类型 B)只可作为成员函数的返回类型 C)只可作为成员函数的参数类型 D)以上三者皆可 4、 下列程序段中有错的是_。 A)template B)Type C)fun
2、c(Type a,b) D)return (ab)?(a):(b); 5、 模板是实现类属机制的一种工具,其功能非常强大,它既允许用户构造类属函数,即_:也允许用户构造类属类 ,即_。 A)模板函数 B)函数模板 C)模板类 D)类模板 6、 类模板的使用实际上是将类模板实例化成一个具体的_。 A)类 B)对象 C)函数 D)模板类7、 关于函数模板,描述错误的是( )A) 函数模板必须由程序员实例化为可执行的函数模板B) 函数模板的实例化由编译器实现C) 一个类定义中,只要有一个函数模板,则这个类是类模板D) 类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化8、 下列的模板
3、说明中,正确的是( ) (两个答案)A) template B) template C) template D) template 9、 假设有函数模板定义如下:Template Max(T a, T b, T 下列选项正确的是( ) (两个答案)A) float x,y; float z; Max(x,y,z);B) int x,y,z; Max(x,y,z);C) int x,y; float z; Max(x,y,z);D) float x; int y, z; Max(x,y,z);10、关于类模板,描述错误的是( )A) 一个普通基类不能派生类模板B) 类模板从普通类派生,也可以从类
4、模板派生C) 根据建立对象时的实际数据类型,编译器把类模板实例化为模板类D) 函数的类模板参数须通过构造函数实例化11、建立类模板对象的实例化过程为( )A) 基类派生类 B) 构造函数对象C) 模板类对象 D) 模板类模板函数12、需要一种逻辑功能能一样的函数,而编制这些函数的程序文本完全一样,区别只是数据类型不同。对于这种函数,下面不能用来实现这一功能的选项是() A)宏函数 B)为各种类型都重载这一函数 C)模板 D)友元函数二、程序设计题1)设计函数模板求出数组的最小值,其中数组为具有 n 个元素,类型为 T。对以下数组进行测试int a 10 = 1,3,5,7,9double d3
5、 = -1.1, -2.2, -3.3char* name = “linda”,”lelele”,”linlin”2)用类模板方式设计一个栈类 stack,其中数据存储结构用动态数组实现,类中包含两个私有数据成员:T* s(存放栈元素)和 top(栈顶元素下标) ,至少包含 3 个公有成员函数:push(元素入栈) 、pop(元素出栈)和 stackempty(判断栈是否为空) ,并建立一个整数栈和学生栈测试模板。3)编写并使用安全数组类模板 BoundArray,能够存储各种类型的数据。 实现对数组进行排序 sort和查找某个元素 T key 的方法 search。 重载、, BoundAr
6、ray, BoundArray和 BoundArray4) (选作) 编写并使用链表模板类 List5) 阅读程序,了解 STL 中 vector 容器的使用方法/测试 STL 中的 vector 容器#include #include using namespace std;/测试 vector 容器的功能int main( )vector vec1; /vec1 对象初始为空/ 插入与删除元素vec1.push_back(2); vec1.push_back(4);vec1.push_back(3);vec1.push_back(8);cout vec2(10,6); /vec2 对象最初
7、有 10 个值为 6 的元素vec2.push_back(7); vec2.pop_back( );vec2.assign(8,1);/显示序列的状态信息cout :iterator i;/声明一个名为 i 的双向迭代器 vector vec3(vec2.begin( ),vec2.begin( )+3); /vec3 对象最初有 3 个值为 6 的元素 / vector vec3(a,a+3); /int a=1,2,3,4,5,6;/从前向后显示 vec3 中的数据cout endl “vec3.begin( )-vec3.end( ):“ endl;for (i =vec3.begin(
8、 ); i !=vec3.end( ); +i)cout *i “ “;cout endl;/测试添加和插入成员函数 vec3.insert(vec3.begin( )+1,5); vec3.insert(vec3.begin( )+1,vec1.begin( ),vec1.end( );/测试移出和删除vec3.pop_back( );vec3.erase(vec3.begin( )+1,vec3.end( )-2);cout “vec1.pop_back( ) and vec1.erase( ):“ endl;for (i =vec3.begin( ); i !=vec3.end( ); +i)cout *i “ “;cout endl;return 0;