Во избежание любого звонка по модулю, мы можем сделать:
constexpr int nextRR(int curIdx, int sz) {
if(curIdx==sz-1) {
return 0;
}
return curIdx+1;
}
for (int rrIndex = 0;;rrIndex = nextRR(rrIndex, sz)) {
// use rrIndex here ...
}
Это будет эффективнее с точки зрения производительности, чем любое решение на основе модулей, если число рабочих не известно во время компиляции.
Обратите внимание, что nextRR
также может быть написано так, чтобы оптимизировать еще больше для платформ, где сравнение с 0 быстрее, чем сравнение с переменной:
constexpr int nextRR(int curIdx, int sz) {
if(curIdx==0) {
return sz-1;
}
return curIdx-1;
}