Ответ 1
#include <boost/iterator/counting_iterator.hpp>
std::for_each( boost::counting_iterator<int>(0),
boost::counting_iterator<int>(100),
do_something );
Я знаю итераторы диапазона в boost, а что касается эта ссылка, кажется, что должен быть простой способ сделать то, что Я хочу, но это не очевидно для меня.
Скажем, я хочу представить числовой диапазон от 0 до 100 (включительно или нет), скажем range(0,100)
. Я хотел бы сделать что-то вроде:
for_each(range<int>(0,100).begin(), range<int>(0,100).end(), do_something);
где do_something
- функтор. У этих итераторов не должно быть накладных расходов на наличие нижнего вектора или что-то вроде этого, а просто предложить последовательность целых чисел. Возможно ли это с внедрением диапазона в boost? Возможно вообще с обычными, стандартными итераторами STL?
#include <boost/iterator/counting_iterator.hpp>
std::for_each( boost::counting_iterator<int>(0),
boost::counting_iterator<int>(100),
do_something );
Просто добавьте к другим ответам, если вы исходите из перспективы С++ 11 - если вы предпочитаете использовать современные для каждого цикла, вы можете сделать это еще более чисто с помощью boost counting_range:
#include <boost/range/counting_range.hpp>
for(auto const &i : boost::counting_range(0, 10)) {
std::cout << i;
}
Выходы:
0123456789
Да, это возможно. Просто кажется, что boost:: range не поддерживает его из коробки, но вы можете
boost::counting_iterator
, который делает именно то, что вы хотитеoperator*()
будет возвращать число и использовать его как итератор для range