一个简单的链表模版类的实现

2016-01-29 12:24 55 1 收藏

一个简单的链表模版类的实现,一个简单的链表模版类的实现

【 tulaoshi.com - C语言心得技巧 】

一个简单的链表模版类的实现


作者:Smoke

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com)


源代码下载

    这是翻阅《数据结构、算法与应用——C++语言描述》以及在网上得到的一些资料后写出来的。起因是在项目中要用到一个链表,但我做一个简单的链表在C++中用的时候跟C差别很多,比如赋值运算(编译器说要做操作符重载,或者考贝构造函数,C++中把结构当成一个类来看了,详见相关介绍的文档或书籍)。后来一想干脆做个template顺便学习一下,一举两得。
几个问题:
CListData和CNode的函数均为内联函数(inline),因为目前的编译器仍不支持分离编译。按《Thinking in C++》一书第16章中的解释是,模版类在定义的时候并没有对内存进行分配置,而是到实例化的情况下才分配内存,因此可以把声明和定义都写在头文件(详见原文)。
因此,如果将两个文件分离则在连接时报错LNK2001。(这问题把我搞得痛苦了好一阵)
在网上及书上的例程中通常是以一个int做为例子,这使得在我们应用的时候很不方便,特别是在不完全理解template的时候。在这里我以一个类(CNodeInfo)作一个节点类型的例子。
代码:

class CNodeInfo{private:intm_Count;//Counter or call it PKEY:)CStringm_strFileName;//for Store filenameDWORDm_dwFileLen;//for store file lengthBOOLm_bStatus;//Transfers status tag;public:    CNodeInfo();~CNodeInfo();void SetStatus(BOOL bStatus = FALSE);BOOL GetStatus();void SetFileLen(DWORD len);DWORD GetFileLen();void SetFileName(CString str);CString GetFileName();};//private 为数大家可以理解成结构中的元素如:typedef struct _FILESTRUCT_{int count;CString strFileName;DWORD dwFIleLenBOOLbStatus;}FILESTRUCTURE.

(如果你想把它改得更通用可以把CString换成char 或者string,其他地方再作相应修改,把BOOL 改成 bool或者用typedef一下)。
Public:是成员函数就不细描述了。比较简单了。代码中注释比较详细,我在这就不写得很细了,把一些我自己认为不容易弄明白的地方写一下就是了(希望有人能读懂我的中式英文,嘿嘿)

参考资料:
《数据结构、算法与应用——C++语言描述》《Thinking in C++》以及网络上相关资料。

来源:https://www.tulaoshi.com/n/20160129/1485958.html

延伸阅读
标签: Web开发
用法:  new Ajax().Request(url,cmd,async,method,postString,title)  参数:  url: 请求页面URL(必填)  cmd: 返回值处理函数(必填)  async: 是否异步 ,(ture|false), 默认true  method: 请求方式,(post|get), 默认get  postString: 请求方式为pos...
标签: PHP
  <?php /* 如有转载,请注明作者 原作者: 何志强 改进: SonyMusic[ sonymusic@163.net ] 文件: ubb.php 备注: 说是改进,其实核心函数parse()已经完全重写了,而且思路也是不一样的。 不过仍是受何志强的例子的启发,而且测试的例子还有URLCHECK等几个函数也是沿用的何志强的程序,谢谢何志强。 目前还没有颜色的功能,但我...
标签: Web开发
% '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% '数据库操作类 '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% '名称:Class_DBOperate '版本:0.2 '作者:qihangnet '更新:2005年6月14日 '作用:简化数据库操作的流程 '授权:免费使用 '%%%%%%%%%%%%%%%%%%%%%%%%%%...
标签: Web开发
结合一个存储过程,将分页做成最简单,请看以下源码 此分页类所操作的存储过程#region 此分页类所操作的存储过程 /**//*********************************************************  *  * 功能强大,配合以下这个存储过程  *  * *******************************************************...
在应用中,我们常常需要Thread缓冲池来做一些事以提高程序的效率和并发性。本文演示了如何利用Queue这种数据结构实现一个简单的Thread缓冲池。 一个Thread缓冲池可以设计成以下这样:缓冲池由几个工作Thread和一个Queue组成,Client负责把任务放到Queue里面(put方法),而工作Thread就依次取出这些任务并执行它们(get方法)。 Queue的一个经...

经验教程

610

收藏

24
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部