【发布时间】:2014-07-02 00:21:29
【问题描述】:
我正在尝试使用自定义迭代器实现链接列表。 我在尝试实现复制构造函数时遇到一堆错误:
'LinkedListIterator>' : 没有合适的默认构造函数可用 'LinkedListIterator> LinkedList::begin(void)' : 无法将'this' 指针 rom 'const LinkedList' 转换为 'LinkedList &' 'LinkedListIterator> LinkedList::end(void)' : 无法将 'this' 指针从 'const LinkedList' 转换为 'LinkedList &'
链表
class LinkedList
{
std::unique_ptr<node> head;
std::unique_ptr<node> tail;
LinkedList(const LinkedList& other)
{
init();
iterator i = other.begin();
while (i != other.end())
add(*i++);
head = other.head;
tail = other.tail;
}
iterator begin()
{
return iterator(head->next);
}
iterator end()
{
return iterator(tail);
}
迭代器
template <typename TNode>
class LinkedListIterator
{
friend class LinkedList<typename TNode::value_type>;
TNode* p;
public:
LinkedListIterator(TNode* p) : p(p) {}
LinkedListIterator(const LinkedListIterator& other) : p(other.p) {}
LinkedListIterator& operator=(LinkedListIterator other) { std::swap(p, other.p); return *this; }
void operator++() { p = p->next; }
void operator++(int) { p = p->next; }
bool operator==(const LinkedListIterator& other) { return p == other.p; }
bool operator!=(const LinkedListIterator& other) { return p != other.p; }
int& operator*() { return p->data; }
LinkedListIterator<TNode> operator+(int i)
{
LinkedListIterator<TNode> iter = *this;
while (i-- > 0 && iter.p)
{
++iter;
}
return iter;
}
};
}
如果您需要我发布更多代码,请告诉我。谢谢。
【问题讨论】:
标签: c++ c++11 linked-list iterator