2012-02-26 14 views
0

我有雙重鏈接列表的代碼,並且有幾行代碼中的想法不明確。我請求專家對以下評論的評論進行評論。自從我上次使用C++以來,就已經很長時間了。只有兩條線我表示對我來說是不可理解的。雙鏈表列表模板中的幾件事情

template <typename T> 
class double_linked 
{ 
    struct node 
    { 
     T data; 
     node* prev; 
     node* next; 
     node(T t, node* p, node* n) : data(t), prev(p), next(n) {} 
    }; 
    node* head; 
    node* tail; 
public: 
    double_linked() : head(NULL), tail (NULL) {} 
    template<int N> 
    double_linked(T (&arr) [N]) : head(NULL), tail (NULL) 
    { 
     for(int i(0); i != N; ++i) 
      push_back(arr[i]); 
    } 

    bool empty() const { return (!head || !tail); } // this doing? 
    operator bool() const { return !empty(); } // this doing? i know operators need in C++ but dont know the use of it here 
    void push_back(T); 
    void push_front(T); 
    T pop_back(); 
    T pop_front(); 

    ~double_linked() 
    { 
     while(head) 
     { 
      node* temp(head); 
      head=head->next; 
      delete temp; 
     } 
    } 
}; 
+0

我知道它告訴列表是否爲空,但我再次知道其實現數組 – 2012-02-26 21:40:41

回答

1

operator bool() const是一個轉換運算符。如果在需要布爾的上下文中使用double_linked的實例,則會調用此函數來執行轉換。 (而將計算爲true如果列表中沒有你的情況是空的。)

另一個功能是一個普通的舊功能,這將返回true如果任headtail爲空。

欲瞭解更多有關轉換操作符,請參閱:How do conversion operators work in C++?

+0

的細節如何? – 2012-02-26 21:43:21

+0

我不明白你的問題。一個'double_linked'數組不會有這些方法/操作符。 – Mat 2012-02-26 21:44:46

+0

operator bool()const,多一點或簡單的解釋請,謝謝 – 2012-02-26 21:46:18

1

首先是要確定列表爲空的函數。在一個雙向鏈表中,如果你至少有一個元素,那麼headtail指針(分別指向列表的開始和結束)必須指向一個有效元素。因此,如果兩個指針都不指向有效元素(即null),則可以通過測試來測試列表是否爲空。這就是表達式!head || !tail所做的 - 檢查指針是否爲null,如果是,則列表爲空。

operator bool()東西是一個轉換操作符。它基本上意味着,無論何時將列表轉換爲bool,都會調用該函數,並將結果用作bool的值。該函數返回列表是否爲空,因此如果列表不爲空,則類似bool result = myList;的表達式將使resulttrue

0

這是一個謂詞,告訴我們它是否爲空,它檢查指針是否爲0(空)。

bool empty() const { return (!head || !tail); } // this doing? 

這允許用戶把容器的實例作爲一個布爾值,如果不是空的,則爲true。

operator bool() const { return !empty(); } // this 

實現鏈表是一個很好的鍛鍊; Tibial編程,但如果你想在你的實際代碼使用鏈表,那麼你真的應該使用std ::列表()。

+0

請多需要一些簡單的解釋,謝謝 – 2012-02-26 21:45:34