Развертывание цикла C++, границы
У меня есть цикл, который я хочу развернуть:
for(int i = 0; i < N; i++)
do_stuff_for(i);
Развернутая:
for(int i = 0; i < N; i += CHUNK) {
do_stuff_for(i + 0);
do_stuff_for(i + 1);
...
do_stuff_for(i + CHUNK-1);
}
Но я должен убедиться, что у меня нет исходной буквы N, например, когда N == 14 и CHUNK == 10. Мой вопрос: как лучше / быстрее / стандартнее / элегантнее (назовите это)? сделать это?
Одно решение, которое приходит:
int i;
for(i = 0; i < (N % CHUNK); i++)
do_stuff_for(i);
for(i; i < N; i += CHUNK) {
// unfolded, for the rest
}
Но, возможно, есть лучшая практика
1 ответ
Вы могли бы использовать распределительный шкаф.
Это называется устройство Даффа