В С++ 11 вы можете использовать for на основе диапазона, который действует как foreach других языков. Он работает даже с обычными массивами C:
int numbers[] = { 1, 2, 3, 4, 5 };
for (int& n : numbers) {
n *= 2;
}
Как он знает, когда остановиться? Работает ли он только со статическими массивами, которые были объявлены в той же области, в которой используется for? Как бы вы использовали этот for с динамическими массивами?