Есть ли эквивалент С++ для генератора Python Xrange в STL или boost?
xrange в основном генерирует добавочное число с каждым вызовом оператора ++. конструктор выглядит так:
xrange(first, last, increment)
надеялся сделать что-то подобное, используя boost для каждого:
foreach(int i, xrange(N))
я. я знаю цикл for. по-моему, они слишком много шаблонов.
Спасибо
мои причины:
Основная причина, по которой я хочу сделать это, - это то, что я использую речь в текстовом программном обеспечении, а обычный цикл программирования затруднен даже при использовании завершения кода. Гораздо эффективнее иметь произносимые конструкции.
много циклов начинаются с нуля и приращения на единицу, что по умолчанию для диапазона. Я нахожу конструкцию python более интуитивной
for(int i = 0; i < N; ++i)
foreach(int i, range(N))
которые должны принимать диапазон в качестве аргумента:
Function(int start, int and, int inc);
function(xrange r);
Я понимаю различия между языками, однако, если конкретная конструкция в python очень полезна для меня и может быть эффективно реализована на С++, я не вижу причин не использовать ее. Для каждой конструкции чуждо С++, но люди ее используют.
Я помещаю свою реализацию в нижней части страницы, а также пример использования.
в моем домене я работаю с многомерными массивами, часто ранг 4 тензора. поэтому я часто бывал с четырьмя вложенными циклами с разными диапазонами/приращениями для вычисления нормализации, индексов и т.д., это не обязательно петли производительности, и я больше заинтересован в удобочитаемости и способности изменять.
например
int function(int ifirst, int ilast, int jfirst, int jlast, ...);
versus
int function(range irange, range jrange, ...);
В приведенном выше случае, если нужны разные strids, вам нужно передать больше переменных, изменить петли и т.д., в итоге вы получите массу целых чисел/почти одинаковых циклов.
foreach и диапазон точно решают мою проблему. знакомство с средним программистом на С++ не очень велико в моем списке проблем - проблемный домен довольно неясен, существует много метапрограмм, собственный SSE-код сгенерированный.