打印本文 打印本文  关闭窗口 关闭窗口  
C++习题与解析(模板-01)
作者:佚名  文章来源:不详  点击数  更新时间:2008/4/18 14:40:52  文章录入:杜斌  责任编辑:杜斌

01.分析以下程序的执行结果 
#include<iostream.h> 
template <class T> 
T max(T x,T y) 

return (x>y?x:y); 

void main() 

cout<<max(2,5)<<","<<max(3.5,2.8)<<endl; 

解: 
本题说明函数模板的使用方法。max()函数是一个函数模板,它返回两个参数中的较大者。在调用时自动联编相应的max()函数。所以输出为:5,3.5 
注意:T为类型形式参数,可包含基本数据类型,也可以包含类类型,不能是普通的数据变量。 

02.分析以下程序的执行结果 
#include<iostream.h> 
template <class T> 
class Sample 

T n; 
public: 
Sample(T i){n=i;} 
void operator++(); 
void disp(){cout<<"n="<<n<<endl;} 
}; 
template <class T> 
void Sample<T>::operator++() 

n+=1; // 不能用n++;因为double型不能用++ 

void main() 

Sample<char> s(’a’); 
s++; 
s.disp(); 

解: 
本题说明类模板的使用方法。Sample是一个类模板,由它产生模板类Sample<char>,通过构造函数给n赋初值,通过重载++运算符使n增1,这里n由’a’增1变成’b’。 
所以输出为:n=b 



03.编写一个对具有n 个元素的数组x[]求最大值的程序,要求将求最大值的函数设计成函数模板。 
解: 
将max()函数设计成一个函数模板。 
本题程序如下: 
#include<iostream.h> 
template <class T> 
T max(T x[],int n) 

int i; 
T maxv=x[0]; 
for(i=1;i<n;i++) 
if(maxv<x[i]) 
maxv=x[i]; 
return maxv; 

void main() 

int a[]={4,5,2,8,9,3}; 
double b[]={3.5,6.7,2,5.2,9.2}; 
cout<<"a数组最大值:"<<max(a,6)<<endl; 
cout<<"b数组最大值:"<<max(b,5)<<endl; 

本程序的执行结果如下: 
a 数组最大值:9 
b 数组最大值:9.2 


04.编写一个使用类模板对数组进行排序、查找和求元素和的程序。 
解: 
设计一个类模板template<class T>class Array,用于对T类型的数组进行排序、查找和求元素和,然后由此产生模板类Array<int>和Array<double>。 
本题程序如下: 
#include<iostream.h> 
#include<iomanip.h> 
template <class T> 
class Array 

T *set; 
int n; 
public: 
Array(T *data,int i){set=data;n=i;} 
~Array(){} 
void sort(); // 排序 
int seek(T key); // 查找指定的元素 
T sum(); // 求和 
void disp(); // 显示所有的元素 
}; 
template<class T> 
void Array<T>::sort() 

int i,j; 
T temp; 
for(i=1;i<n;i++) 
for(j=n-1;j>=i;j--) 
if(set[j-1]>set[j]) 

temp=set[j-1];set[j-1]=set[j];set[j]=temp; 


template <class T> 
int Array<T>::seek(T key) 

int i; 
for(i=0;i<n;i++) 
if(set[i]==key) 
return i; 
return -1; 

template<class T> 
T Array<T>::sum() 

T s=0;int i; 
for(i=0;i<n;i++) 
s+=set[i]; 
return s; 

template<class T> 


void Array<T>::disp() 

int i; 
for(i=0;i<n;i++) 
cout<<set[i]<<" "; 
cout<<endl; 

void main() 

int a[]={6,3,8,1,9,4,7,5,2}; 
double b[]={2.3,6.1,1.5,8.4,6.7,3.8}; 
Array<int>arr1(a,9); 
Array<double>arr2(b,6); 
cout<<" arr1:"<<endl; 
cout<<" 原序列:"; arr1.disp(); 
cout<<" 8在arr1中的位置:"<<arr1.seek(8)<<endl; 
arr1.sort(); 
cout<<" 排序后:"; arr1.disp(); 
cout<<"arr2:"<<endl; 
cout<<" 原序列:"; arr2.disp(); 
cout<<" 8.4在arr2中的位置:"<<arr2.seek(8.4)<<endl; 
arr2.sort(); 
cout<<" 排序后:"; arr2.disp(); 

本程序的执行结果如下: 
arr1: 
原序列:6 3 8 1 9 4 7 5 2 
8在arr1中的位置:2 
排序后:1 2 3 4 5 6 7 8 9 
arr2: 
原序列:2.3 6.1 1.5 8.4 6.7 3.8 
8.4在arr2中的位置:3 
排序后:1.5 2.3 3.8 6.1 6.7 8.4 
打印本文 打印本文  关闭窗口 关闭窗口