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.