Как правильно называть счетчик в цикле for для массива?
Есть какой-то вектор. Допустим vector<int> layersArr;
Как будет правильно назвать счетчик в цикле for, для лучшей читаемости кода?
for(int i = 0; i < layersArr.size(); i++);
Или же
for(int layer = 0; layer < layersArr.size(); layer++);
Ответы (3 шт):
Итератор (не индекс!) будет правильно использовать так:
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...
Если бы существовало правило - именовать итераторы только так, и никак иначе - оно было бы реализовано в стандарте языка :)
Всё от ситуации зависит. Если у вас два вложенных цикла на разные массивы, то нужно чтобы индексы не перепутались у Вас в голове называть с именем массива.
Так неправильно :
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];
i, j и k - общепринятые переменные для цикла. Это тянется уже лет 50 с фортрана. Там они были по умолчанию целочисленные и математикам так было понятно и очевидно - вспомните математические обозначения для суммы-произведения с их индексами.
Поэтому, в большинстве случаев, если цикл небольшой (строк 20, влазит на экран), а переменные i, j и k используются как индексы массива, то всем все очевидно. Но если вдруг окажется, что j используется в качестве первой размерности, а i второй - вот это вызовет подозрения.
Если же индекс не просто индекс (у него есть какая то дополнительная сущность), то лучше дать смысловое название.
Вернемся к Вашему примеру.
Если размер цикла одна-две строки, то i - это нормальное имя, всем будет очевидно.
Если тело цикла 5-10 и внутри ещё есть цикл или сложное условие - лучше сделать имя смысловое.
Если тело стало ещё больше - это повод задуматься о том, что бы сделать небольшой рефакторинг. И проблема сводится к предыдущим.
В многих случаях можно сделать красивее, если использовать стандартную библиотеку алгоритмов. те же find, find_if, count уберут много циклов.