教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 行业范文 >

c++模板及应用习题答案

来源:网络收集 时间:2026-08-04
导读: c++模板及应用习题答案 4.编程题 4.1设计一个函数模板,其中包括数据成员T a[n]以及对其进行排序的成员函数 sort( ),模板参数T可实例化成字符串。 #include iostream #include string using namespace std; templatetypename Tvoid Sort(T* a,int n){ int

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字,全部文档内容请下载后查看。喜欢就下载吧 ……

c++模板及应用习题答案.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/983441.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)