为您的自定义列表创建符合 STL 的迭代器非常普通。
然而,如果引用列表是一个循环列表,这似乎毫无意义,因为所有 STL 算法都在 [first, last)
范围和循环列表 first = last 中运行
。
是否有一种标准/合理的方法来克服这个障碍并让 STL 算法在“自制”循环列表上运行?
我假设定义符合 STL 的迭代器是实现这一目标的第一步,但也可能有一个可以在范围上运行的解决方案。
我需要为大量“自制”结构实现此功能。我当前的解决方案是从 boost::iterator_facade
派生,然后创建自定义 range
类(如 Rudolph's )并使用围绕基于范围的执行的任何算法。这仍然存在一些逻辑障碍,希望看到可行的替代方案和/或解决方案。
最佳答案
您将需要自定义迭代器,但解决方案仍然可以基于范围。
一种可能性是 begin()
可以返回一个特别标记的迭代器(标记 initial=true
),这样它就知道它还没有完成一轮。 end()
将返回一个该标志设置为 false 的迭代器。然后 operator++
会将标志设置为 false,这样 begin()
就不会等于 end()
。您也可以使用不同的标记方案。
关于c++ - STL 算法可以与循环列表一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23992187/