c++ - 如何让 operator++ 继续到链表中的下一个节点指针?

标签 c++ struct

我有一个保存数据的链表,以及指向下一个节点的指针,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 &current->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/

相关文章:

c++ - pIter != cont.end() 在 for 循环中的表现

c++ - 给定两个点,找到直线上的第三个点

c++ - 使程序停止直到按下回车

ios - 比较 2 个结构数组

ios - 如何为结构的每个成员分配一个编号? ( swift )

c - 如何从堆栈中弹出不同类型的结构

c - C中结构中的字符串数组

.net - fatal error C1083 : Cannot open include file: 'vld.h' : No such file or directory

c# - 包装我们的软件库以服务于 C++ 和 C# 客户端应用程序的最佳方式是什么?

c - 空的初始值设定项列表是有效的 C 代码吗?