Я обычно определяю это, хотя мне сказали, что я попаду в ад:
#define forsn(i, s, n) for(int i = (s); i < (n); ++i)
#define forn(i, n) forsn(i, 0, n)
#define forall(it, g) for(typeof g.begin() it = g.begin(); it != g.end(); ++it)
Затем, чтобы выполнить цикл от 0 до n, обычную задачу, я говорю forn(i, n) foo(i);
, и цикл любого стандартного контейнера c, я говорю forall(it, c) foo(it);
Обратите внимание, что typeof
является расширением GCC для стандарта.