链表类模板的基本应用(c++)
类模板都是以template开头写起,模式如下:
template<class type> //其中class 是固定格式 type 可以指向任何一个数据的类型 如double等。
//函数模板可如下写出type 函数名称(参数1,参数2)//类模板如下class 类名
{数据成员成员函数
};
<>内为模板参数,模板参数主要分为两种:
一种是模板类型参数,另一种是模板非类型参数.
当模板被调用时,模板中的代码才会被执行。也就相当于一个实例,称为模板类或模板函数.
创建一个链表类模板步骤如下:
1.先创造一个类模板
template<class type>
class clist //类模板
{private: //类中的私有成员type *pheader; //创造一个头结点 可以是任意数据结构的头结点int m_nodesum; //节点数量public:clist() //构造函数 {pheader = NULL; m_nodesum = 0;//给每个数据初始化 }type *movetrial() //获取尾结点的函数{type *ptemp = pheader; //定义一个临时节点将其指向头结点for(int i = 1; i < m_nodesum; i++){ptemp->ptemp->next; //next指向下一个节点的指针,在后续的类中出现。 }return ptemp;}void addnode(type *pnode) //添加节点的函数{if(m_nodesum == 0) //判断链表是否为空{pheader=pnode;}else{type *ptrail = movetrial(); //获取尾结点的位置ptrail->next = pnode;}m_nodesum++; //每次多一个数据存储时节点数加一}void passlist(){if(m_nodesum > 0){type *ptmp = pheader; //定义一个临时节点方便遍历链表printf("\t\t姓名\t\t号码\n");printf("\t\t%s\t\t%d\n",ptmp->name,ptmp->num);for(int i = 1; i < m_nodesum; i++){ptmp=ptmp->next; //获取下一个节点printf("\t\t%s\t\t%d\n",ptmp->name,ptmp->num);}}}~clist() //类中的析构函数,将所有的数据都进行删除处理{if(m_nodesum > 0){type *pdelete = pheader;type *t=NULL;for(int i = 0; i < m_nodesum; i++){t = pdelete->next; // 保存链表后一个未被删除的数据delete pdelete; //释放当前节点pdelete = t;}m_nodesum = 0;pdelete = NULL;t = NULL;}pheader = NULL; }
};
链表的类模板完成后,要出现一个参数类来代替其中的type。并起到可以保存数据的作用,可以使用类或者结构体都可以完成本操作。(其中结构体和类的一个区别是:结构体中不能有成员函数,但是类中可以有成员函数)。
2.完成上述的一个参数类
利用这个类来代替上述链表类中的type,用来保存数据
class cnode
{public:cnode *next;char name[28];int num;cnode(){next = NULL;}
};
3.写出主函数:
代码如下:
int main()
{int n;clist<cnode> nodelist; //构造一个类模板实例cout<<"请输入成员个数:"<<endl;cin>>n;cout<<"请输入成员信息:"<<endl;for(int i=0;i<n;i++){node *pnode=new cnode(); //给cnode类开辟一个空间保存数据cin>>pnode->name>>pnode->num;nodelist.addnode(pnode); //将其添加到链表中}nodelist.passlist(); //遍历链表输出return 0;
}
运行结果如下:
此链表模板可以应用任意一个程序之中,只要自己创建一个类模板实例即可,不需要将所有的代码重新再敲一遍,这样节省了很多时间。例如我们现在要创建一个球队的数据,只需要知道球队几个人以及各个人的姓名以及球衣的号码即可。
clist<cnode> basketballteam;
cout<<"请输入球队成员个数:"<<endl;cin>>n;cout<<"请输入球队成员信息:"<<endl;for(int i=0;i<n;i++){node *pnode=new node();cin>>pnode->name>>pnode->num;basketballteam.add(pnode); }basketballteam.passlist();
如上代码,我们还可以将其改为通讯录的保存或者班级成员的信息保存链表。
只需要构造一个模板实例 将名字改为我们所需要的名字,输入输出数据也可以发生更改,只需要在链表类模板中将其遍历的函数中输出的结构改变即可。
第一篇博客就到这里了,本人(c++小白)只是将自己理解的链表模板类写出来,如果以上有什么细节出现了问题希望各位大佬帮助更改,虚心学习.本人随心情更新博客不进任何实验室,不喜欢被催着的感觉,喜欢自由在,也同样希望可以和大佬一起讨论问题。
链表类模板的基本应用(c++)相关推荐
- 深圳大学计软《面向对象的程序设计》实验15 函数模板和类模板
A. 有界数组模板类(类模板) 题目描述 编写有界数组模板BoundArray(即检查对数组元素下标引用并在下标越界时终止程序的执行),能够存储各种类型的数据.要求实现对数组进行排序的方法sort,及 ...
- 泛型算法(lambda表达式、function类模板、bind函数适配器、迭代器类别、链表数据结构独有的算法)
文章目录 概念 find()函数 迭代器令算法不依赖于容器 但算法依赖于元素类型的操作 算法永远不会执行容器的操作 只读算法 accumulate()函数 从两个序列中读取元素(equal函数为例) ...
- 基于C++类模板的链表
一.基于C++类模板定义一个链表,管理学生成绩信息( 学号和成绩),进行排序后再输出. #include#includeusing namespace std; templateclass list{ ...
- 链表(C++类模板实现)
文章目录 1. 用C++实现链表 2. 代码 1. 用C++实现链表 本文用到C++中的类模板,用类模板的好处就是方便建立任何类型的链表.但类模板这里有个坑就是无法分离编译,具体原因可以百度搜索类模板 ...
- 单链表(c++类模板实现)
后续会写详细的实现过程,就是功能4,和功能13测试的时候还有点问题,不过会改进的 定义在"LinkedList.h" #include <iostream> using ...
- 泛函编程—模板函数_类模板
函数业务逻辑一样,只是函数参数类型不同 函数模板的本质:类型参数化--泛型编程 语法: template <typename T> template <class T1,class ...
- 模拟STL链表类的实现
模拟STL链表类的实现 STL内部定义了多种容器和迭代器,方便了数据结构类的使用,且不需关注内部源码.为了方便个人使用习惯,我又重写了一个链表类,作为学C++后的第一个项目作业.我将其命名为clist ...
- VC里的集合类、链表类、映射类
集合类是用来容纳和处理一组对象或标准数据类型变量的C++类.每个集合类对象可以看作一个单独的对象.类成员函数可作用于集合的所有元素.MFC提供两种类型的集合类: 基于模板的集合类.非基于模板的集合类. ...
- wxWidgets:wxList< T >类模板的用法
wxWidgets:wxList< T >类模板的用法 wxWidgets:wxList< T >类模板的用法 用法详细说明 wxWidgets:wxList< T &g ...
最新文章
- 两个nb模块之间通讯方法_NB-IoT是什么?一口气带你搞懂NB-IoT的诞生、特性以及应用...
- pythonisalpha函数计算公式_常用python实现.ipynb
- python 字符串转换成整数
- 【译】Privacy on the Blockchain
- flask 上下文管理
- 一文掌握深度学习、神经网络和学习过程的历史
- matlab 30案例 目录,MATLAB-智能算法30个案例分析-终极版(带目录).doc
- PHP+sqlsrv的分页实现
- Android NDK开发之 Neon优化
- Nginx源码阅读 ---- 模块的初始化
- Mac镜像创建方法简介
- 用Wineskin在Mac上运行exe文件
- 江苏计算机二级c语言考试内容,江苏省计算机等级考试二级C语言考试大纲_复习提纲.doc...
- idea中热部署插件JRebel的激活
- 简仿Path的商店表情弹出模块
- Java 垃圾回收算法
- 联网门锁·未来可期|专访中科易安教育行业事业部CSO聂辛
- 2011年LAMP兄弟连PHP学习优惠政策第一季!
- pc端-轮播图 和 二级菜单
- 文献阅读:ACME: pan-specific peptide–MHC class I binding prediction through attention-based