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

标签 c++ data-structures iterator

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

相关文章:

c++ - 您如何使用 "function type"?

java - 如何在Java中检索给定范围的子数组中的第k个元素?

c++ - 如何在基类中实现子类迭代器的统一接口(interface)?

C++ 模板参数作为引用左值

c++ - vector 旋转问题

algorithm - 编写一个算法来返回一个数组,使得 1..n 中的每个数字 k 恰好出现两次并且与其副本相距 k 距离

c - 无法调试 - 无法使用堆栈

ruby - 使用 .each/iterator 的线程安全 Ruby 队列

c++ - 当一个字符串是 ""或一个 vector 没有元素时, `begin()` 等于 `end()` 吗?

c++ - 在 std::map 的值上使用非 ptr 是一个好习惯