一个简朴的链表模版类的实现
这是翻阅《数据布局、算法与应用——C++语言描写》 以及在网上获得的一些资料后写出来的。起因是在项目中要用到一个链表,但我做一个简朴的链表在C++顶用的时候跟C不同许多,好比赋值运算(编译器说要做操纵符重载,可能考贝结构函数,C++中把布局当成一个类来看了,详见相关先容的文档或书籍)。厥后一想爽性做个template顺便进修一下,一举两得。
几个问题:
CListData和CNode的函数均为内联函数(inline),因为今朝的编译器仍不支持疏散编译。按《Thinking in C++》一书第16章中的表明是,模版类在界说的时候并没有对内存举办分派置,而是到实例化的环境下才分派内存,因此可以把声明和界说都写在头文件(详见原文)。
因此,假如将两个文件疏散则在毗连时报错LNK2001。(这问题把我搞得疾苦了好一阵)
在网上及书上的例程中凡是是以一个int做为例子,这使得在我们应用的时候很不利便,出格是在不完全领略template的时候。在这里我以一个类(CNodeInfo)作一个节点范例的例子。
代码:
class CNodeInfo
{
private:
int m_Count;//Counter or call it PKEY:)
CString m_strFileName;//for Store filename
DWORD m_dwFileLen;//for store file length
BOOL m_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 dwFIleLen
BOOL bStatus;
}FILESTRUCTURE.
(假如你想把它改得更通用可以把CString换成char 可能string,其他处所再作相应修改,把BOOL 改成 bool可能用typedef一下)。
Public:是成员函数就不细描写了。较量简朴了。代码中注释较量具体,我在这就不写得很细了,把一些我本身认为不容易弄大白的处所写一下就是了(但愿有人能读懂我的中式英文,嘿嘿)
参考资料:
《数据布局、算法与应用——C++语言描写》《Thinking in C++》以及网络上相关资料。
本文配套源码