一個簡單的鏈表模版類的實現

字號:

這是翻閱《數據結構、算法與應用——C++語言描述》 以及在網上得到的一些資料后寫出來的。起因是在項目中要用到一個鏈表,但我做一個簡單的鏈表在C++中用的時候跟C差別很多,比如賦值運算(編譯器說要做操作符重載,或者考貝構造函數,C++中把結構當成一個類來看了,詳見相關介紹的文檔或書籍)。后來一想干脆做個template順便學習一下,一舉兩得。
    幾個問題:
    CListData和CNode的函數均為內聯函數(inline),因為目前的編譯器仍不支持分離編譯。按《Thinking in C++》一書第16章中的解釋是,模版類在定義的時候并沒有對內存進行分配置,而是到實例化的情況下才分配內存,因此可以把聲明和定義都寫在頭文件(詳見原文)。
    因此,如果將兩個文件分離則在連接時報錯LNK2001。(這問題把我搞得痛苦了好一陣)
    在網上及書上的例程中通常是以一個int做為例子,這使得在我們應用的時候很不方便,特別是在不完全理解template的時候。在這里我以一個類(CNodeInfo)作一個節(jié)點類型的例子。
    代碼:
    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++》以及網絡上相關資料。