Какое хорошее название для универсального индекса в цикле for в C ++?

Меня учили циклам в C ++ с использованием общих индексов, таких как i, j, k. Всякий раз, когда индексы имеют значение, например, строки и столбцы в матрице, я всегда давал им описательные имена, такие как row и col. Однако иногда мне просто нужно пройтись по вектору или сделать что-то в цикле for, где индекс действительно является фиктивной переменной.

Я был рад продолжать использовать i, j, k, но недавно мой друг, который работает в софтверной компании, сказал мне в одном из своих обзоров кода, что ему посоветовали против этого, и фактически вместо этого рекомендовал использовать общие индексы форма ii, jj, kk и т. д. Приведенная причина заключалась в том, что эти циклы легче искать в цикле.

Я не знаю каких-либо руководств по стилю, которые касаются этой проблемы, и я не решаюсь переучить себя и преподавать этот стиль студентам, если этот вопрос не был серьезно продуман с разных точек зрения.

Вопрос: Существует ли какой-то консенсус или фактический стиль для родовых индексов в циклах, основанный на этом и других типах практических вопросов?

1

Решение

Стиль именования i j k для индексов цикла восходит, по крайней мере, на время FORTRAN, когда переменные с именами начинаются с I через N были неявно считаются, чтобы иметь тип INTEGER (все остальные переменные считались REAL).

Хотя идея именовать индексы двойными буквами звучит изящно, трудно представить, почему кому-то придется искать переменную цикла: такие переменные обычно имеют смысл в контексте цикла, который обычно довольно узок. Более того, современные IDE предоставляют функции поиска, управляемые семантикой вашего кода, поэтому поиск по тексту ii становится гораздо менее важным.

В этом стиле именования нет ничего плохого, если его придерживаются все члены вашей команды. Правда, это относится ко всем рекомендациям по присвоению имен: они получают большую ценность от постоянного использования.

1

Другие решения

использование ii / jj / kk — больше личного предпочтения вашего коллеги (что ему нужно для поиска индексной переменной).

две вещи на уме
1) держать индексы локальными. Используйте для (int i = 0; …)
2) предпочитайте итератор, когда это возможно.

0

Имена констант итераций возвращаются из древних языков, таких как «algol» -> i. Они стали традиционными в сегодняшнем программировании. Но вы можете свободно использовать любое наименование, подходящее для того, чтобы люди понимали. Пример:

for(int outer=0; outer< maxVal-1; outer++)
{
for(int inner=outer+1; inner < maxVal; inner++)
{
matrixA[outer][inner]=0; // rowmajor style
}
}

for(int row=0; row< maxVal-1; row++)
{
for(int column=row+1; column < maxVal; column++)
{
matrixA[column][row]=0; // columnmajor style
}
}
0

Если я не делаю что-то более конкретное (x и y или u и v для графики, строки / столбца в других контекстах и ​​т. Д.), Мне нравится использовать просто c, потому что ввод c ++ заставляет меня хихикать. 🙂

0
По вопросам рекламы [email protected]