您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C十十 >> 辅导 >> 正文    
  C++习题与解析(模板-03) 【注册男护士专用博客】          

C++习题与解析(模板-03)

www.nanhushi.com     佚名   不详 

题 5. 一个Sample类模板的私有数据成员为T n,在该类模板中设计一个operator==重载运算符函数 ,用于比较各对象的n数据是否相等。 
解: 
本题程序如下: 
#include<iostream.h> 
template <class T> 
class Sample 

T n; 
public: 
Sample(T i){n=i;} 
int operator==(Sample &); 
}; 
template <class T> 
int Sample<T>::operator==(Sample &s) 

if(n==s.n) 
return 1; 
else 
return 0; 

void main() 

Sample<int> s1(2),s2(3); 
cout<<"s1与s2的数据成员"<<(s1==s2?"相等":"不相等")<<endl; 
Sample<double>s3(2.5),s4(2.5); 
cout<<"s3与s4的数据成员"<<(s3==s4?"相等":"不相等")<<endl; 

本程序的运行结果如下: 
s1与s2的数据成员不相等 
s3与S4的数据成员相等 



题 6. 对第3章的例3.5进行修改,只设计一个Sample类,其数据和方法均包含在该类中,而且使用类模板的方式实现。 
#include<iostream.h> 
#define Max 100 
template <class T> 
class Sample 

T A[Max]; 
int n; 
void qsort(int l,int h); // 私有成员,由quicksort()成员调用 
public: 
Sample(){n=0;} 
void getdata(); // 获取数据 
void insertsort(); // 插入排序 
void Shellsort(); // 希尔排序 
void bubblesort(); // 冒泡排序 
void quicksort(); // 快速排序 
void selectsort(); // 选择排序 
void disp(); 
}; 
template <class T> 
void Sample<T>::getdata() 

cout<<"元素个数:"; 
cin>>n; 
for(int i=0;i<n;i++) 

cout<<"输入第"<<i+1<<"个数据:"; 
cin>>A[i]; 


template <class T> 
void Sample<T>::insertsort() // 插入排序 

int i,j; 
T temp; 
for(i=1;i<n;i++) 

temp=A[i]; 
j=i-1; 
while(temp<A[j]) 

A[j+1]=A[j]; 
j--; 

A[j+1]=temp; 


template <class T> 
void Sample<T>::Shellsort() // 希尔排序 

int i,j,gap; 
T temp; 
gap=n/2; 
while(gap>0) 

for(i=gap;i<n;i++) 

j=i-gap; 
while(j>=gap) 
if(A[j]>A[j+gap]) 

temp=A[j]; 
A[j]=A[j+gap]; 
A[j+gap]=temp; 
j=j-gap; 

else j=0; 

gap=gap/2; 


template <class T> 
void Sample<T>::bubblesort() // 冒泡排序 

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

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


template <class T> 
void Sample<T>::quicksort() // 快速排序 

qsort(0,n-1); 

template<class T> 
void Sample<T>::qsort(int l,int h) 

int i=l,j=h; 
T temp; 
if(l<h) 

temp=A[l]; 
do{ 
while(j>i&&A[j]>=temp) 
j--; 
if(i<j) 

A[i]=A[j]; 
i++; 

while(i<j&&A[i]<=temp) 
i++; 
if(i<j) 

A[j]=A[i]; 
j--; 

}while(i<j); 
A[i]=temp; 
qsort(1,j-1); 
qsort(j+1,h); 


template <class T> 
void Sample<T>::selectsort() // 选择排序 

int i,j,k; 
T temp; 
for(i=0;i<n;i++) 

k=i; 
for(j=i+1;j<=n-1;j++) 
if(A[j]<A[k]) 
k=j; 
temp=A[i]; 
A[i]=A[k]; 
A[k]=temp; 


template <class T> 
void Sample<T>::disp() 

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

void main() 

int sel=0; 
Sample<char> s; // 由类模板产生char型的模板类 
s.getdata(); 
cout<<"原来序列:"; 
s.disp(); 
cout<<"0:插入排序 1:希尔排序 2:冒泡排序 3:快速排序\n 4:选择排序 其它退出"<<endl; 
cout<<"选择排序方法:"; 
cin>>sel; 
switch(sel) 

case 0: 
s.insertsort(); 
cout<<"插入排序结果"; 
break; 
case 1: 
s.Shellsort(); 
cout<<"希尔排序结果:"; 
break; 
case 2: 
s.bubblesort(); 
cout<<"冒泡排序结果:"; 
break; 
case 3: 
s.quicksort(); 
cout<<"快速排序结果:"; 
break; 
case 4: 
s.selectsort(); 
cout<<"选择排序结果:"; 
break; 

s.disp(); 

程序运行结果如下: 


题 7. 设计一个模板类Sample,用于对一个有序数组采用二分法查找元素下标。 
解: 
#include<iostream.h> 
#define Max 100 
template <class T> 
class Sample 

T A[Max]; 
int n; 
public: 
Sample(){} 
Sample(T a[],int i); 
int seek(T c); 
void disp() 

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

}; 
template <class T> 
Sample<T>::Sample(T a[],int i) 

n=i; 
for(int j=0;j<i;j++) 
A[j]=a[j]; 

template <class T> 
int Sample<T>::seek(T c) 

int low=0,high=n-1,mid; 
while(low<=high) 

mid=(low+high)/2; 
if(A[mid]==c) 
return mid; 
else if(A[mid]<c) low=mid+1; 
else high=mid-1; 

return -1; 

void main() 

char a[]="acegkmpwxz"; 
Sample<char>s(a,10); 
cout<<"元素序列:"; s.disp(); 
cout<<"’g’的下标:"<<s.seek(’g’)<<endl; 

程序运行结果如下: 
元素序列:a c e g k m p w x z 
元素’g’的下标: 3 

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)                            【进男护士社区逛逛】
    姓 名:
    * 游客填写  ·注册用户 ·忘记密码
    主 页:

    评 分:
    1分 2分 3分 4分 5分
    评论内容:
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。