Развертывание цикла 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 ответ

Вы могли бы использовать распределительный шкаф.

Это называется устройство Даффа

Другие вопросы по тегам