Я написал следующий код, пытаясь создать двусвязный список с внутренним 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;
};
Я знаю, что у меня могут возникнуть или не возникнуть проблемы соператоры ++ / -, но это не особенно беспокоит меня, так как я разберусь с ними, когда у меня будет достаточно кода для некоторого тестирования.Не стесняйтесь оставлять подсказки, если вы склонны:)