我有任何不提供随机访问迭代器的容器,目标是创建一个适配器来接收此类迭代器的输入并为容器提供随机访问迭代器接口(interface)。
我不确定如何使用 boost::iterator_facade
,因为它有点令人困惑:-/有一些关于堆栈溢出的示例,但我不确定如何使用它们(here )
任何链接/示例都可能有所帮助。 (我阅读了 boost
中的示例,考虑到我在 boost
最佳答案
你不想这样做。
要么
- 使用带有功能的通用范围库进行“即时”缓存,例如 Eric Niebler 的
Container Ranges
concept from his Ranges proposal - 明确编码意图,例如通过为您的函数创建标签分派(dispatch)重载,将输入范围“具体化”到随机访问算法的临时容器中
如果您真的坚持,是的,您可能可以实现您的想法,但除了隐藏运行时/存储成本外,我看不到它有什么好处。特别是,它不会因为需要保持生命周期而变得微不足道。¹
稍微相关:Boost Spirit 有一个 boost::spirit::multi_pass
适配器,但它只从 InputIterator
升级到 ForwardIterator
(允许回溯)。
¹(当你有一个已经是随机访问范围的临时文件时你会怎么做?你不能保留对它的引用,但你也不应该不必要地复制它。)
关于c++ - 将任何迭代器转换为随机访问迭代器的适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27560210/