gpt4 book ai didi

c++ - 我可以在环中实现迭代器 end() 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:44:57 25 4
gpt4 key购买 nike

首先,我真的无法在 Internet 上找到太多关于环形数据结构的信息,所以这里有一个简短的实现来展示什么是环形(根据我的讲师的说法)

template<typename Key, typename Info>
class Ring
{
struct Node // structure for storing the data
{
Key k;
Info inf;

Node* next;
Node* prev;
};

Node* any; // pointer to a node belonging to the ring, NULL if the ring is empty
};

它类似于一个循环列表,但是any可以指向结构中的任何元素,我们不关心顺序,我们添加的位置等。

除了我已经完成的项目的主要任务之外,我们还必须以这种方式实现迭代器,即

for(auto it = r1.begin(); it != r1.end(); ++it)      // r1 is a ring
{ cout << *it << ' '; }

正常工作,即。打印整个戒指。

有可能吗? Iterator end() 应该指向一个地方,下一个元素将被添加到这个地方,而我们没有这样的点。如果设置为any(同begin()),则循环根本不会执行,如果设置为any->prev,则会省略最后一个元素。

您有什么想法吗?我该如何实现?还是我说这是不可能的?

最佳答案

end() 在环的上下文中是没有意义的:您无法识别环中“最后一个元素之后的位置”的位置,这就是 end() 是。

在环上迭代的惯用方法是从任意一点向相反的方向发送两个迭代器,并在两个迭代器都到达并且其中一个已经“处理”了相同的元素后终止。

关于c++ - 我可以在环中实现迭代器 end() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40804176/

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