c++ - 将任何迭代器转换为随机访问迭代器的适配器

标签 c++ boost boost-iterators

我有任何不提供随机访问迭代器的容器,目标是创建一个适配器来接收此类迭代器的输入并为容器提供随机访问迭代器接口(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/

相关文章:

c++ - 单个 Eclipse C++ 项目能否针对不同平台以不同方式链接不同的库?

c++ - 使用带有 Incrementable 类型的 boostcounting_iterator

c++ - 跳过迭代器

c++ - 在特定变量上禁用 GCC "may be used uninitialized"

c++ - 无法结合模板和类函数重载

c++ - 指向非指针变量结构的指针。这些变量,堆或堆栈在哪里?

c++ - 如何在C++中创建可变尺寸的网格?

r - R 包 biomaRt 和此依赖项 RSQLite 出错

c++ - boost 备忘单