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++ - 在 C++ 中创建链表

c++ - 迭代单个 vector 并删除作为其他元素子集的元素?

java - 链表添加和删除未按预期工作,Java

c++ <未解析的重载函数类型>

c++ - 替换表的列值(如果存在)

'//' 和 '///' 之间的 C++ 区别

c++ - 在磁盘上实现无锁数据结构

c++ - 包括数据类型之间的斗争

Matlab:用于存储{ Key( double x, double y) : Value (z)} 的数据结构

rust - Rust 中是否有一个特性允许在没有协程等实验性功能的情况下按组进行折叠?