c++模板及应用习题答案
c++模板及应用习题答案
4.编程题
4.1设计一个函数模板,其中包括数据成员T a[n]以及对其进行排序的成员函数 sort( ),模板参数T可实例化成字符串。
#include <iostream>
#include <string>
using namespace std;
template<typename T>void Sort(T* a,int n){
int i,j;
T t;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if (a[j]>a[j+1])
{ t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
template<typename T>void Print(T* a,int n){
int i;
for(i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
int main(){
string
Str[10]={"Zhang","Li","Wang","Qian","Zhao","Wu","Xu","Tang","Shen","Liang"}; int Int[8]={20,12,0,-5,9,-18,6,11};
double Dou[7]={3.07,8.12,-0.45,6,10,-9,7.29};
Sort<string>(Str,10);
Sort<int>(Int,8);
Sort<double>(Dou,7);
Print(Str,10);
Print(Int,8);
Print(Dou,7);
return 0;
}
4.2设计一个类模板,其中包括数据成员T a[n]以及在其中进行查找数据元素的函数int search(T)模板参数 T可实例化成字符串。
#include <iostream>
using namespace std;
template<typename T,int n>class A{
int size;
c++模板及应用习题答案
T* element;
public:
A();
~A();
int Search(T);
void SetElement(int index,const T& value);
};
template<typename T,int n>A<T,n>::A(){
size=n>1? n:1;
element=new T[size];
}
template<typename T,int n>A<T,n>::~A(){
delete [] element;
}
template<typename T,int n>int A<T,n>::Search(T t){
int i;
for(i=0;i<size;i++)
if(element[i]==t)
return i;
return -1;
}
template<typename T,int n>void A<T,n>::SetElement(int index,const T& value){ element[index]=value;
}
int main(){
A<int,5> intAry; //用int实例化,建立模板类对象
A<double,10> douAry;//用double实例化,建立模板类对象
int i;
for(i=0;i<5;i++)
intAry.SetElement(i,i+3);
for(i=0;i<10;i++)
douAry.SetElement(i,(i+i)*0.35);
i=intAry.Search(7);
if(i>=0)cout<<i<<endl;
i=douAry.Search(0.7);
if(i>=0)cout<<i<<endl;
return 0;
}
4.3设计一个单向链表类模板,节点数据域中数据从小到大排列,并设计插入、删除节点的成员函数。
#include<iostream>
using namespace std;
template<typename T>class List;
c++模板及应用习题答案
template<typename T>class Node{
T info; //数据域
Node<T> *link; //指针域
public:
Node(); //生成头结点的构造函数
Node(const T & data);//生成一般结点的构造函数
friend class List<T>;
};
template <typename T> Node<T>::Node(){link=NULL;}
template <typename T> Node<T>::Node(const T & data){
info=data;
link=NULL;
}
//定义链表类
template<typename T>class List{
Node<T> *head; //链表头指针和尾指针
public:
List(); //构造函数,生成头结点(空链表)
~List(); //析构函数
void MakeEmpty(); //清空一个链表,只余表头结点
Node<T>* Find(T data); //搜索数据域与data相同的结点,返回该结点的地址 void PrintList(); //打印链表的数据域
void InsertOrder(Node<T> *p); //按升序生成链表
Node<T>* CreatNode(T data); //创建一个结点(孤立结点)
Node<T>* DeleteNode(Node<T>* p); //删除指定结点
};
template<typename T>List<T>::List(){
head=new Node<T>(-9999);//头结点,最小的数据从小到大插入
}
template<typename T>List<T>::~List(){
MakeEmpty();
delete head;
}
template<typename T>void List<T>::MakeEmpty(){
Node<T> *tempP;
while(head->link!=NULL){
tempP=head->link;
head->link=tempP->link; //把头结点后的第一个节点从链中脱离
delete tempP; //删除(释放)脱离下来的结点
}
}
template<typename T> Node<T>* List<T>::Find(T data){
Node<T> *tempP=head->link;
while(tempP!=NULL && tempP->info!=data) tempP=tempP->link;
c++模板及应用习题答案
return tempP; //搜索成功返回该结点地址,不成功返回NULL
}
template<typename T>void List<T>::PrintList(){
Node<T>* tempP=head->link;
while(tempP!=NULL){
cout<<tempP->info<<'\t';
tempP=tempP->link;
}
cout<<endl;
}
template<typename T>void List<T>::InsertOrder(Node<T> *p){
Node<T> *tempP=head,*tempQ=head; //tempQ指向tempP前面的一个节点
while(tempP!=NULL){
if(p->info<tempP->info)break; //找第一个比插入结点大的结点,由tempP指向 tempQ=tempP;
tempP=tempP->link;
}
p->link=tempP;
tempQ->link=p;
}
template<typename T>Node<T>* List<T>::CreatNode(T data){//建立新节点
Node<T>*tempP=new Node<T>(data);
return tempP;
}
template<typename T>Node<T>* List<T>::DeleteNode(Node<T>* p){
Node<T>* tempP=head->link,*tempQ=head,*tempC;
while(tempP!=NULL && tempP!=p){
tempQ=tempP;
tempP=tempP->link;
}
tempC=tempP;
tempQ->link=tempP->link;
return tempC;
}
int main(){
Node<int> * P1;
List<int> li …… 此处隐藏:3257字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [行业范文]美好的法语句子
- [行业范文]描写露珠的句子
- [行业范文]精彩禅语句子图片
- [行业范文]关于满嘴谎言的句子
- [行业范文]关于安静的句子48句
- [行业范文]关于小河的句子
- [行业范文]描写稻田的句子
- [行业范文]思念好朋友的句子
- [行业范文]赞美雪的句子
- [行业范文]早上激励人心的句子
- [行业范文]失恋忧伤的句子
- [行业范文]努力积极向上的句子
- [行业范文]对工作心灰意冷的句子
- [行业范文]失恋让人心疼的句子
- [行业范文]描写珍惜青春的句子
- [行业范文]表达思念的句子简短
- [行业范文]关于父爱的句子范例
- [行业范文]浪漫的英语句子
- [行业范文]关于周末的句子
- [行业范文]思念牵挂的句子
- 有关感恩班会课件简短(二篇)(感恩班会
- 2025年初二下乡军训心得体会800字(15篇
- 关于新员工培训方案汇编(关于新员工培
- 精选高考生寒假学习计划书(精)(高考生
- 毕业实训报告心得体会(3篇)(实训报告心
- 银行工作感悟及心得范文怎么写(四篇)(
- 精选领导干部个人政治画像报告通用(七
- 精选超市11.11活动促销方案(精品超市品
- 2025年怎么做自我介绍汇总(5篇)(至2025
- 最新企业错峰生产方案(26篇)(山西企业
- 最新暑期三下乡社会实践调研报告范本(
- 最新幼儿园大班教育教学总结怎么写(最
- 最新教师节主持词小学(优秀9篇)(教师节
- 关于小学安全教育教学方案(推荐)(关于
- 员工信模板范文怎么写(五篇)(员工信息
- 最新保险销售离职申请书(十六篇)(最新
- 最新XX小学防校园欺凌工作方案怎么写(2
- 有关特岗教师辞职信范文(推荐)(特岗教
- 精选党的建设工作要点简短(党的建设的
- 如何写安康杯竞赛活动总结汇总(4篇)(安




