Как правильно называть счетчик в цикле for для массива?

Есть какой-то вектор. Допустим vector<int> layersArr;

Как будет правильно назвать счетчик в цикле for, для лучшей читаемости кода?

for(int i = 0; i < layersArr.size(); i++);

Или же

for(int layer = 0; layer < layersArr.size(); layer++);

Ответы (3 шт):

Автор решения: Harry

Итератор (не индекс!) будет правильно использовать так:

for(vector<int>::iterator it = layersArr.begin(); it != layersArr.end(); ++it)

или так:

for(auto it = layersArr.begin(); it != layersArr.end(); ++it)

или даже так:

for(auto elem: layersArr)

Что же касается названия переменной - то если программируете в команде - пользуйтесь уставом монастыря, так сказать, стилем именования, принятым в команде.

Если программируете сами - поступайте так, как вам удобнее, а главное, понятнее - чтоб потом не начинать мучительно соображать, что это за переменная - i5q8_3s...

Если бы существовало правило - именовать итераторы только так, и никак иначе - оно было бы реализовано в стандарте языка :)

→ Ссылка
Автор решения: AlexGlebe

Всё от ситуации зависит. Если у вас два вложенных цикла на разные массивы, то нужно чтобы индексы не перепутались у Вас в голове называть с именем массива.

Так неправильно :

vector<int> Arr;
vector<double> Money;
int i,j;
for( i = 0;j<Arr.size();++i)
   for ( j=0;j<Money.size();++i)
       Money[i] += Arr[j];

Здесь ошибки с циклах, не то сравниваете, не то прибавляете, индекс не из того массива.

Можно написать так:

vector<int> Arr;
vector<double> Money;
int ArrInd,MoneyInd;
for( ArrInd = 0;ArrInd<Arr.size();++ArrInd)
   for ( MoneyInd=0;MoneyInd<Money.size();++MoneyInd)
       Money[MoneyInd] += Arr[ArrInd];
→ Ссылка
Автор решения: KoVadim

i, j и k - общепринятые переменные для цикла. Это тянется уже лет 50 с фортрана. Там они были по умолчанию целочисленные и математикам так было понятно и очевидно - вспомните математические обозначения для суммы-произведения с их индексами.

Поэтому, в большинстве случаев, если цикл небольшой (строк 20, влазит на экран), а переменные i, j и k используются как индексы массива, то всем все очевидно. Но если вдруг окажется, что j используется в качестве первой размерности, а i второй - вот это вызовет подозрения.

Если же индекс не просто индекс (у него есть какая то дополнительная сущность), то лучше дать смысловое название.

Вернемся к Вашему примеру.

Если размер цикла одна-две строки, то i - это нормальное имя, всем будет очевидно. Если тело цикла 5-10 и внутри ещё есть цикл или сложное условие - лучше сделать имя смысловое. Если тело стало ещё больше - это повод задуматься о том, что бы сделать небольшой рефакторинг. И проблема сводится к предыдущим.

В многих случаях можно сделать красивее, если использовать стандартную библиотеку алгоритмов. те же find, find_if, count уберут много циклов.

→ Ссылка