gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:41:15 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com