我有一个保存数据的链表,以及指向下一个节点的指针,Node<T>* next
,像这样:
template <class T>
struct Node
{
T data;
Node<T>* next;
};
问题是我想在其中放入一个后递增运算符,因此它返回我的节点的先前值,但递增引用。所以如果我这样做
Node<int>* someNode = someList.SomeNode();
Node<int>* tmp = someNode++;
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;
};
参见 std::slist<>
implementation供引用。看template<typename _Tp> struct _List_iterator
.看STL实现胜过很多书。
用法:
NodeIterator<T> it = &node;
++it;
T& t = *it;
关于c++ - 如何让 operator++ 继续到链表中的下一个节点指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12464517/