Zakres C ++ / odpowiednik xrange w STL lub boost?

Czy istnieje odpowiednik C ++ dla generatora Pythona Xrange w STL lub boost?

xrange generuje zwiększoną liczbę przy każdym wywołaniu operatora ++. konstruktor jest taki:

xrange(first, last, increment)

miał nadzieję zrobić coś takiego, używając doładowania dla każdego:

foreach(int i, xrange(N))

I. Jestem świadomy pętli for. moim zdaniem są one zbyt dużym wzorcem.

Dzięki

moje powody:

Moim głównym powodem, dla którego chcę to zrobić, jest to, że używam mowy do tekstu, a zwykła pętla programowania jest trudna, nawet jeśli używa się uzupełniania kodu. Znacznie bardziej efektywne jest wymienialne konstrukcje.

wiele pętli zaczyna się od zera i zwiększa o jeden, co jest domyślnym zakresem. Uważam, że konstrukcja Pythona jest bardziej intuicyjna

 for(int i = 0; i < N; ++i)
 foreach(int i, range(N))

funkcje, które muszą przyjmować zakres jako argument:

 Function(int start, int and, int inc);
 function(xrange r);

Rozumiem różnice między językami, jednak jeśli konkretny konstrukt w Pythonie jest dla mnie bardzo przydatny i można go skutecznie zaimplementować w C ++, nie widzę powodu, aby go nie używać. Dla każdego konstruktu jest obcy dla C ++, jakkolwiek ludzie go używają.

Umieściłem moją implementację na dole strony oraz przykład użycia.

w mojej domenie pracuję z tablicami wielowymiarowymi, często tensorem o pozycji 4. więc często kończyłbym z 4 zagnieżdżonymi pętlami z różnymi zakresami / przyrostami, aby obliczyć normalizację, indeksy itp., które niekoniecznie są pętlami wydajności i bardziej interesuje mnie czytelność poprawności i możliwość modyfikacji.

na przykład

int function(int ifirst, int ilast, int jfirst, int jlast, ...);
versus
int function(range irange, range jrange, ...);

W powyższym przykładzie, jeśli potrzebne są różne kroki, musisz przekazać więcej zmiennych, zmodyfikować pętle itp., W końcu otrzymasz masę liczb całkowitych / prawie identycznych pętli.

foreach i zakres dokładnie rozwiązują mój problem. znajomość przeciętnego programisty C ++ nie jest wysoka na mojej liście problemów - domena problemowa jest raczej niejasna, istnieje wiele metaprogramowania, wewnętrzny SSE, wygenerowany kod.

questionAnswers(10)

yourAnswerToTheQuestion