boost中的数值范围迭代器?

时间:2009-02-26 22:31:58

标签: c++ stl boost iterator range

我知道boost中的范围迭代器,而对于this reference,似乎应该有一种简单的方法来做我想要的事情,但这对我来说并不明显。

假设我想表示一个数字范围,0到100(包括与否),比如说range(0,100)。我想做点什么:

for_each(range<int>(0,100).begin(), range<int>(0,100).end(), do_something);

其中do_something是一个仿函数。这个迭代器不应该有一个下面的向量或类似的东西的开销,但只提供一个整数序列。这是否可以通过boost中的范围实现来实现?可以使用普通的标准STL迭代器吗?

3 个答案:

答案 0 :(得分:18)

boost::counting_iterator

#include <boost/iterator/counting_iterator.hpp>

std::for_each( boost::counting_iterator<int>(0),
               boost::counting_iterator<int>(100),
               do_something );

答案 1 :(得分:9)

如果您是从C ++ 11角度来看,只是为了添加其他答案 - 如果您更愿意使用现代for-each循环,则可以使用boost counting_range更加干净地执行此操作:< / p>

#include <boost/range/counting_range.hpp>

for(auto const &i : boost::counting_range(0, 10)) {
  std::cout << i;
}

输出:

  

0123456789

答案 2 :(得分:5)

是的,有可能。看起来好像只有boost :: range不支持开箱即用,但你可以

  • 使用boost::counting_iterator,它可以满足您的需求
  • 实现一个类似数字的对象,operator*()将返回一个数字,并将其用作range
  • 的迭代器