我有一个链表,我保存数据,指向下一个节点Node<T>* next,如下所示:
template <class T>
struct Node
{
T data;
Node<T>* next;
};
Run Code Online (Sandbox Code Playgroud)
问题是我想把这个后增量运算符放入,所以它返回我的节点的先前值,但增加引用.所以,如果我这样做
Node<int>* someNode = someList.SomeNode();
Node<int>* tmp = someNode++;
Run Code Online (Sandbox Code Playgroud)
tmp将是原始someNode值,但someNode将是someNode->next.
是否可以在结构中放置运算符?我试过,并搜索了如何做,但由于我不处理运营商,我不知道该怎么做.
您不能将成员函数添加到指针等基本类型.
你想要定义的是迭代器.在节点指针上使用包装器类成功:
template <class T>
struct NodeIterator
{
NodeIterator(Node<T>* current) : current(current) {}
NodeIterator& operator ++() { current = current->next; return *this; }
NodeIterator operator ++(int) {
NodeIterator retVal = *this;
++(*this);
return retVal;
}
T* operator-> () const { return ¤t->data; }
T& operator * () const { return current->data; }
Node<T>* current;
};
Run Code Online (Sandbox Code Playgroud)
请参阅std::slist<> 实现参考.看看template<typename _Tp> struct _List_iterator.阅读STL实施比许多书更好.
用法:
NodeIterator<T> it = &node;
++it;
T& t = *it;
Run Code Online (Sandbox Code Playgroud)