首先,我真的无法在 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/