我試圖用一個類似於內部STL的迭代器創建一個雙向鏈表時寫了下面的代碼。我現在只提供頭文件和非相關的部分。迭代器實現問題
我的問題是...
的STL使用迭代器以一定的方式 - 具體來說,您STL容器從.begin瀏覽超過()迭代直到但不包括.END( )迭代器。爲此,.end()迭代器必須超過容器的末尾。我將如何實現這種語義給予我開始(這是主要問題)?
接口中是否存在任何缺失(關於迭代器類和應該存在的東西)?
下面的代碼:
template <typename T>
class Node
{
T data;
Node<T>* next;
Node<T>* prev;
};
template <typename T>
class LinkedList
{
public:
class Iterator
{
public:
Iterator() {}
explicit Iterator(const Node<T>& init) { current = init; }
//Dereference operator - return the current node's data.
inline T& operator*() { return current->data; }
//Prefix returns by reference.
inline Iterator& operator++() { current = current->next; return *this; }
inline Iterator& operator--() { current = current->prev; return *this; }
//Postfix returns non-reference and has int parameter to differentiate function signature.
inline Iterator operator++(int) { Iterator res = *this; current = current->next; return res; }
inline Iterator operator--(int) { Iterator res = *this; current = current->prev; return res; }
private:
Node<T>* current;
};
Iterator begin() { return Iterator(m_start); }
Iterator end() { return Iterator(m_end); }
private:
Node<T>* m_start;
Node<T>* m_end;
};
我知道,我可能會或可能不會有與++ /問題 - 運營商,但是,這並不特別煩我,因爲我」當我有足夠的代碼對此進行一些測試時,我會解決這些問題。隨意丟棄提示但如果你傾向於:)
我該如何實現該操作符 - >爲了這個類的需要? (我沒有具體詢問運算符是如何被重載的,更像是我做了什麼,我不知道如何轉發它來調用基礎列表數據類型的函數)。並感謝你的答案到目前爲止:) +1 – 2011-12-17 22:52:28
@ w00te它只是返回一個指向數據'&current-> data'的指針,奇怪的是它的工作方式。儘管答案中的一些信息會很好。 – 2011-12-17 22:54:09
@ w00te'T * operator - >(){return&(current-> data); }' – Pubby 2011-12-17 22:54:33