PTA-C++(模板1)

本文详细介绍了C++中的模板技术,包括pair模板的使用,函数模板的实例化,以及如何创建和使用队列、求最大值和数组最小值的函数模板。示例代码展示了模板在整数、浮点数和字符串类型上的应用,强调了模板的泛型编程特性。
摘要由CSDN通过智能技术生成

一、判断题

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值