Подтвердить что ты не робот

Числовые итераторы диапазона в boost?

Я знаю итераторы диапазона в boost, а что касается эта ссылка, кажется, что должен быть простой способ сделать то, что Я хочу, но это не очевидно для меня.

Скажем, я хочу представить числовой диапазон от 0 до 100 (включительно или нет), скажем range(0,100). Я хотел бы сделать что-то вроде:

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

где do_something - функтор. У этих итераторов не должно быть накладных расходов на наличие нижнего вектора или что-то вроде этого, а просто предложить последовательность целых чисел. Возможно ли это с внедрением диапазона в boost? Возможно вообще с обычными, стандартными итераторами STL?

4b9b3361

Ответ 1

boost:: counting_iterator

#include <boost/iterator/counting_iterator.hpp>

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

Ответ 2

Просто добавьте к другим ответам, если вы исходите из перспективы С++ 11 - если вы предпочитаете использовать современные для каждого цикла, вы можете сделать это еще более чисто с помощью boost counting_range:

#include <boost/range/counting_range.hpp>

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

Выходы:

0123456789

Ответ 3

Да, это возможно. Просто кажется, что boost:: range не поддерживает его из коробки, но вы можете

  • используйте boost::counting_iterator, который делает именно то, что вы хотите
  • реализовать числовой объект, чей operator*() будет возвращать число и использовать его как итератор для range