一、判断题
1.pair类模板的作用是将两个数据组成一个数据,用来表示一个二元组或一个元素对,两个数据可以是同一个类型也可以是不同的类型。(T)
二、单选题
2-1
关于函数模板,描述错误的是。(A)
A.函数模板必须由程序员实例化为可执行的函数模板
B.函数模板的实例化由编译器实现
C.一个类定义中,只要有一个函数模板,则这个类是类模板
D.类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化
2-2
下列的模板说明中,正确的是。(C)
A.template < typename T1, T2 >
B.template < class T1, T2 >
C.template < typename T1, typename T2 >
D.template ( typedef T1, typedef T2 )
2-3
假设有函数模板定义如下:(B)
template
Max( T a, T b ,T &c)
{ c = a + b ; }
下列选项正确的是( )。
A.int x, y; char z ;Max( x, y, z ) ;
B.double x, y, z ;Max( x, y, z ) ;
C.int x, y; float z ;Max( x, y, z );
D.float x; double y, z;Max( x, y, z ) ;
2-4
建立类模板对象的实例化过程为。(C)
A.基类-派生类
B.构造函数-对象
C.模板类-对象
D.模板类-模板函数
2-5
模板函数的真正代码是在哪个时期产生的__C__。
A.源程序中声明函数时
B.源程序中定义函数时
C.源程序中调用函数时
D.运行执行函数时
2-6
类模板的模板参数_D___。
A.只可作为数据成员的类型
B.可作为成员函数的返回类型
C.可作为成员函数的参数类型
D.以上三者皆可
2-7
下列关于pair<>类模板的描述中,错误的是。(C)
A.pair<>类模板定义头文件utility中
B.pair<>类模板作用是将两个数据组成一个数据,两个数据可以是同一个类型也可以是不同的类型
C.创建pair<>对象只能调用其构造函数
D.pair<>类模拟提供了两个成员函数first与second来访问这的两个数据
三、函数题
6-1 一个简单的队列类模板
分数 10
作者 张德慧
单位 西安邮电大学
请按照下列简单的整数队列类创建一个简单的队列类模板。
整数队列类如下:
const int SIZE=100;
//整数队列类
class Queue {
int q[SIZE];
int front; //队列头
int rear; //队列尾
public:
Queue( )
{ front = rear = 0; }
void put(int i); // 在队尾放置一个数据
int get( ); // 从队列头部取一个数据
};
裁判测试程序样例:
在这里给出函数被调用进行测试的例子。例如:
#include
#include
using namespace std;
// 你提交的代码将嵌入到这里
int main()
{
Queue a; // 创建一个整数队列
int m,n;
cin>>m>>n;
a.put(m);
a.put(n);
cout << a.get() << " ";
cout << a.get() << endl;
Queue d; // 创建一个双精度浮点数队列
double x,y;
cin>>x>>y;
d.put(x);
d.put(y);
cout << d.get() << " ";
cout << d.get() << endl;
Queue qs;// 创建一个字符串队列
string s1,s2,s3;
cin>>s1>>s2>>s3;
qs.put(s1);
qs.put(s2);
qs.put(s3);
cout << qs.get() << " ";
cout << qs.get() << " ";
cout << qs.get() << endl;
return 0;
}
输入样例:
6 9
3.14159 2.781828
ShenZhen Beijing HangZhou
输出样例:
6 9
3.14159 2.78183
ShenZhen Beijing HangZhou
const int SIZE=100;
//整数队列类
template<class T>
class Queue {
T q[SIZE];//0~99,0号元素废弃不用,初始rear=front=0
int front; //队列头
int rear; //队列尾
public:
Queue( )
{ front = rear = 0; }
void put(T i); // 在队尾放置一个数据
T get( ); // 从队列头部取一个数据
};
void Queue<T> :: put(T i){
if(rear==SIZE-1){
return 0;
}
rear++;
q[rear] = i;
}
T Queue<T> :: get( ){
if(rear==front){
return 0;
}
front++;
return q[front];
}
6-2 Max函数模板
分数 10
作者 张德慧
单位 西安邮电大学
创建一个函数模板Max( ),该模板返回两个参数中的最大值,例如:
Max(3,4)返回4
Max(‘c’,‘a’)返回’c’
裁判测试程序样例:
#include
#include
using namespace std;
//你提交的代码将被嵌入到这里
int main( )
{
int m,n;
char c,d;
string s1,s2;
cin>>m>>n;
cin>>c>>d;
cin>>s1>>s2;
cout<<Max(m,n)<<endl;
cout<<Max(c,d)<<endl;
cout<<Max(s1,s2)<<endl;
return 0 ;
}
/* 请在这里填写答案 */
输入样例:
在这里填写一组输入
-21252 3
输出样例:
在这里填写相应的输出
3
template<typename T>
T Max(T x,T y){
return x>y?x:y;
}
6-3 创建函数模板实现求数组中的最小元素
分数 10
作者 张德慧
单位 西安邮电大学
创建一个函数模板实现求数组中的最小元素,在主函数将分别使用该模板求整形数组和double型数组中的最小元素并输出。
输入:
6 (整型数组中的元素个数)
8 3 4 1 6 9 (整型数组中的元素)
5 (双精度浮点数数组中的元素个数)
2.7 3.1 9.8 5.3 7.6 (双精度浮点数数组中的元素)
输出:
1
2.7
函数模板接口定义:
T Min(T *p, int len)
其中 p 和 len 都是用户传入的参数。 p 是数组元素的起始地址; len 是数组的长度。
裁判测试程序样例:
#include
using namespace std;
// 你提交的代码将嵌入到这里
int main( )
{
int n,m,*pn,i=0;
cin>>n;
pn=new int[n];
do{
cin>>pn[i];
i++;
}while(i<n);
double *pd;
i=0;
cin>>m;
pd=new double[m];
do{
cin>>pd[i];
i++;
}while(i<m);
cout<<Min(pn,n)<<endl;
cout<<Min(pd,m)<<endl;
delete [ ] pn;
delete [ ] pd;
return 0;
}
输入样例:
9
8 2 7 6 4 5 3 1 0
7
3.1 9.6 5.8 2.7 6.3 7.0 8.5
输出样例:
0
2.7
template<typename T>
T Min(T *p,int len){
T min = p[0];
for(int i=1;i<len;i++){
if(p[i]<min){
min = p[i];
}
}
return min;
}