适配器将任何迭代器转换为随机访问迭代器

时间:2014-12-19 05:29:09

标签: c++ boost boost-iterators

我有任何不提供随机访问迭代器的容器,目标是创建一个接受输入这样的迭代器的适配器,并为容器提供随机访问迭代器接口。

我不确定如何使用boost::iterator_facade因为它有点令人困惑: - /有一些关于堆栈溢出的例子,但我不知道如何使用它们(here

任何链接/示例都可能有所帮助。 (我读了boost中的例子,考虑到我在boost

的经验,他们有点难以理解

1 个答案:

答案 0 :(得分:1)

你不想这样做。

要么

  • 使用带有工具的通用范围库进行“即时”缓存,例如Eric Niebler的 Container Ranges concept from his Ranges proposal
  • 明确编码意图,例如通过为您的函数创建一个标记调度重载,将输入范围“reifying”到随机访问算法的临时容器中

如果你真的坚持,是的,你可以实现你的想法,但除了隐藏运行时/存储成本之外,我不知道它会带来什么。特别是,保持生命周期的需要并不是微不足道的.¹


略有关联:Boost Spirit有一个boost::spirit::multi_pass适配器,但只能从InputIterator升级到ForwardIterator(允许回溯)。

¹(当你有一个已经是随机访问范围的临时文件时你会怎么做?你不能保留对它的引用,但你也不应该不必要地复制它。)