我知道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迭代器吗?
答案 0 :(得分:18)
#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