template
struct ListNode
{
ListNode(){}
~ListNode() {}
type m_data;
ListNode* m_left = 0;
ListNode* m_right = 0;
};
template
class List
{
public:
...
ListNode* m_head;
};
И вот как дальше делать?
У меня была попытка сделать так:
class Iterator
{
ListNode* m_node;
ListNode* m_nodeEnd;
bool m_isEnd;
public:
Iterator() :m_node(0), m_isEnd(true) {}
Iterator(ListNode* head) :m_node(head), m_isEnd(false)
{
if (!head)
{
m_isEnd = true;
}
else
{
m_nodeEnd = head->m_left;
}
}
~Iterator() {}
Iterator& operator ++() {
if (m_node == m_nodeEnd) {
m_isEnd = true;
}
m_node = m_node->m_right;
return *this;
}
bool operator ==(const Iterator& other) const {
if (m_isEnd != other.m_isEnd) return false;
return true;
}
bool operator !=(const Iterator& other) const {
if (m_isEnd != other.m_isEnd) return true;
return false;
}
const type& operator*() {
return m_node->m_data;
}
type* operator->() {
return m_node->m_data;
}
};
Iterator begin() {
return Iterator(m_head);
}
Iterator end() {
return Iterator();
}
Для того чтобы работало (в for например), надо определить, был ли достигнут конец. для этого добавил переменную m_isEnd
Всё работает. Но я чую что сделано не правильно (мне даже стыдно показывать этот код). И как сделать const версию?