是否有类似于循环(环形)迭代器的东西?

3
我想知道是否有一种迭代器可以迭代std :: string中的值,并在到达末尾时从开头重新开始。换句话说,该对象将无限迭代,一遍又一遍地输出相同的值序列。
谢谢!

Boost 有类似的东西。 - chris
请查看此答案:https://dev59.com/KHI-5IYBdhLWcg3wlpYM#1782262 - Evgeny Panasyuk
1
@Evgeny 那个答案中的 increment() 函数看起来有问题。如果增加到结尾,它应该立即跳回开头。 - Yakk - Adam Nevraumont
@Yakk - 是的,我刚刚看了一下 - 我同意你的观点,它应该立即跳转到开始。否则可能会出现结束引用。尽管消息的作者说:“这可能无法编译,但应该让您开始。” - Evgeny Panasyuk
https://dev59.com/KHI-5IYBdhLWcg3wlpYM - adripanico
1个回答

5
一个生成器函数就可以做到这一点。Boost迭代器为此提供了迭代器适配器: 下面是一个示例:http://coliru.stacked-crooked.com/a/267279405be9289d
#include <iostream>
#include <functional>
#include <algorithm>
#include <iterator>
#include <boost/generator_iterator.hpp>

int main()
{
  const std::string data = "hello";
  auto curr = data.end();

  std::function<char()> gen = [curr,data]() mutable -> char
  { 
      if (curr==data.end())
          curr = data.begin();
      return *curr++;
  };

  auto it = boost::make_generator_iterator(gen);
  std::copy_n(it, 35, std::ostream_iterator<char>(std::cout, ";"));
}

添加了一个“短”示例(还使用copy_nLWS上)。 - sehe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接