c++ - STL 算法可以与循环列表一起使用吗?

标签 c++ algorithm stl

为您的自定义列表创建符合 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/

相关文章:

c++ - 监视目录以完成子目录的创建,然后启动另一个进程,C++

python - IP摄像机Python错误

java - 当客户的帐户进行存款交易时,我是否应该使用观察者模式通知客户对象?

java - TripleSum 计算 O(n) 时间的算法,Java

c++ - STL <set> 搜索

c++ - Opencv:在轮廓图像中填充颜色

c++ - 在 C++ 中创建 Linux 进程

algorithm - 遗传算法-子集和问题

c++ - 为什么使用 rbegin() 而不是 end() - 1?

c++ - 在没有new的情况下在堆上创建一个对象