Развертывание цикла C ++, границы - PullRequest
2 голосов
/ 15 ноября 2011

У меня есть цикл, который я хочу развернуть:

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 Ответ

7 голосов
/ 15 ноября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...