类模板都是以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++)相关推荐

  1. 深圳大学计软《面向对象的程序设计》实验15 函数模板和类模板

    A. 有界数组模板类(类模板) 题目描述 编写有界数组模板BoundArray(即检查对数组元素下标引用并在下标越界时终止程序的执行),能够存储各种类型的数据.要求实现对数组进行排序的方法sort,及 ...

  2. 泛型算法(lambda表达式、function类模板、bind函数适配器、迭代器类别、链表数据结构独有的算法)

    文章目录 概念 find()函数 迭代器令算法不依赖于容器 但算法依赖于元素类型的操作 算法永远不会执行容器的操作 只读算法 accumulate()函数 从两个序列中读取元素(equal函数为例) ...

  3. 基于C++类模板的链表

    一.基于C++类模板定义一个链表,管理学生成绩信息( 学号和成绩),进行排序后再输出. #include#includeusing namespace std; templateclass list{ ...

  4. 链表(C++类模板实现)

    文章目录 1. 用C++实现链表 2. 代码 1. 用C++实现链表 本文用到C++中的类模板,用类模板的好处就是方便建立任何类型的链表.但类模板这里有个坑就是无法分离编译,具体原因可以百度搜索类模板 ...

  5. 单链表(c++类模板实现)

    后续会写详细的实现过程,就是功能4,和功能13测试的时候还有点问题,不过会改进的 定义在"LinkedList.h" #include <iostream> using ...

  6. 泛函编程—模板函数_类模板

    函数业务逻辑一样,只是函数参数类型不同 函数模板的本质:类型参数化--泛型编程 语法: template <typename T> template <class T1,class ...

  7. 模拟STL链表类的实现

    模拟STL链表类的实现 STL内部定义了多种容器和迭代器,方便了数据结构类的使用,且不需关注内部源码.为了方便个人使用习惯,我又重写了一个链表类,作为学C++后的第一个项目作业.我将其命名为clist ...

  8. VC里的集合类、链表类、映射类

    集合类是用来容纳和处理一组对象或标准数据类型变量的C++类.每个集合类对象可以看作一个单独的对象.类成员函数可作用于集合的所有元素.MFC提供两种类型的集合类: 基于模板的集合类.非基于模板的集合类. ...

  9. wxWidgets:wxList< T >类模板的用法

    wxWidgets:wxList< T >类模板的用法 wxWidgets:wxList< T >类模板的用法 用法详细说明 wxWidgets:wxList< T &g ...

最新文章

  1. 两个nb模块之间通讯方法_NB-IoT是什么?一口气带你搞懂NB-IoT的诞生、特性以及应用...
  2. pythonisalpha函数计算公式_常用python实现.ipynb
  3. python 字符串转换成整数
  4. 【译】Privacy on the Blockchain
  5. flask 上下文管理
  6. 一文掌握深度学习、神经网络和学习过程的历史
  7. matlab 30案例 目录,MATLAB-智能算法30个案例分析-终极版(带目录).doc
  8. PHP+sqlsrv的分页实现
  9. Android NDK开发之 Neon优化
  10. Nginx源码阅读 ---- 模块的初始化
  11. Mac镜像创建方法简介
  12. 用Wineskin在Mac上运行exe文件
  13. 江苏计算机二级c语言考试内容,江苏省计算机等级考试二级C语言考试大纲_复习提纲.doc...
  14. idea中热部署插件JRebel的激活
  15. 简仿Path的商店表情弹出模块
  16. Java 垃圾回收算法
  17. 联网门锁·未来可期|专访中科易安教育行业事业部CSO聂辛
  18. 2011年LAMP兄弟连PHP学习优惠政策第一季!
  19. pc端-轮播图 和 二级菜单
  20. 文献阅读:ACME: pan-specific peptide–MHC class I binding prediction through attention-based

热门文章

  1. 第7.11节 案例详解:Python类实例变量
  2. 【笔记】阿里云大学Java面向对象开发课程笔记01-77课时
  3. Java 中标签的作用
  4. 四川仁寿铧中学高考2021成绩查询,仁寿中学2021年排名
  5. 2019世界地球日,美厦三恒系统与您一起守护我们的地球母亲
  6. G power计算样本量——混合实验设计
  7. 主力吸筹猛攻指标源码_通达信偷偷连续吸筹指标,主力吸筹猛攻指标源码
  8. 计算机 vfp表间关系有,VFP表间连接和VFP表的更新操作
  9. 基于php旅游网站管理系统获取(php毕业设计)
  10. 手机图片怎么提取文字?高效渠道一览