В чем разница между каждым (в) и для (:)?

Как человек, у которого есть фон в python, я был очень удивлен, когда впервые увидел цикл for ( : ):

vector<int> vec = {1,2,3,4};
int sum = 0;
for (int i : vec){
    sum += i;
}
//sum is now 10

Это очень полезная конструкция и, вероятно, должна использоваться, когда вам не нужен индекс значения несколько раз.

Но сегодня я нашел там также цикл for each ( in ), используемый следующим образом:

vector<int> vec = {1,2,3,4};
int sum = 0;
for each (int i in vec){
    sum += i;
}
//sum is now 10

Интересно, что результаты google для второго в основном связаны с Microsoft, а не с обычными справочными сайтами С++.

Каковы различия между этими двумя циклами?

Ответ 1

Первый называется диапазоном для цикла и является функцией языка С++ 11. Это позволяет вам перебирать такие диапазоны, которые имеют доступный метод begin() и end() (член или нечлен) или массивы.

Второй - это синтаксис Microsoft, доступный для С++/CLI, но также доступный для С++. Он позволяет выполнять итерацию через массив или коллекцию. Его использование не рекомендуется, и предпочтительным является цикл, основанный на диапазоне. См. для каждого, в.

Ответ 2

Для каждого цикла предоставляется Microsoft Visual С++. См.: http://msdn.microsoft.com/en-us/library/xey702bw%28VS.80%29.aspx

Это не стандартный С++ и довольно старый (представлен в VS2005). Компилятор (VS) преобразует этот цикл в подходящий для циклов при компиляции.

Поэтому лучше придерживаться регулярных циклов for ( ; ; ) или цикла for ( : ), чтобы обеспечить совместимость с другими компиляторами, такими как g++.