我使用通用索引(如i,j,k)在C ++中学习循环。每当索引具有含义时,例如矩阵中的行和列,我总是给它们像row和col这样的描述性名称。但是,有时候,我只需要遍历一个向量,或者在for循环中做一些事情,其中索引实际上只是一个虚拟变量。
我满足于继续使用i,j,k,但最近我的一位朋友为一家软件公司工作,在他的一个代码审查中告诉我,他被建议不要这样做,事实上鼓励他使用形式为ii,jj,kk等的通用索引。给出的理由是在循环内搜索这些索引更容易。
我不知道有任何风格指导方针可以解决这个问题,我对自己进行再培训并向学生传授这种风格犹豫不决,除非从不同的角度对这个问题进行过认真思考。
问题:基于此类和其他类型的实际问题,循环中的泛型索引是否存在某种共识或事实上的风格?
答案 0 :(得分:1)
当名称从i
到j
开始的变量时,k
I
N
对于循环索引的命名样式至少会返回FORTRAN次。被隐含地认为属于INTEGER
类型(所有其他变量都被认为属于REAL
类型。)
虽然用双字母命名索引的想法听起来很整洁,但很难想象为什么有人必须搜索循环变量:这样的变量通常在循环的上下文中有意义,这通常很窄。此外,现代IDE提供了由代码语义驱动的搜索功能,因此以ii
进行文本搜索变得不那么重要了。
这种命名方式没有任何问题,只要团队中的每个人都能持续地练习。但是,所有命名指南都是如此:它们从一致使用中获得了很多价值。
答案 1 :(得分:0)
使用ii / jj / kk更多是您同事的个人偏好(他需要搜索索引变量)。
记住两件事 1)保持指数本地化。用于(int i = 0; ...) 2)尽可能选择迭代器。答案 2 :(得分:0)
迭代常数名称来自古代语言,例如“algol” - >一世 。它们成为当今编程的传统。但是你可以自由地使用任何适合让人们理解的命名。例如:
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
}
}
答案 3 :(得分:0)
除非我正在做更具体的事情(x和y或u和v用于图形,其他上下文中的行/列等),我喜欢简单地使用c,因为输入c ++让我傻笑。 :)