如何让operator ++继续执行链表中的下一个节点指针?

fre*_*oul 2 c++ struct

我有一个链表,我保存数据,指向下一个节点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.

是否可以在结构中放置运算符?我试过,并搜索了如何做,但由于我不处理运营商,我不知道该怎么做.

Pio*_*ycz 6

您不能将成员函数添加到指针等基本类型.

你想要定义的是迭代器.在节点指针上使用包装器类成功:

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 &current->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)