Sam Asked:2020-04-03 16:18:18 +0000 UTC2020-04-03 16:18:18 +0000 UTC 2020-04-03 16:18:18 +0000 UTC 在 for 循环中为数组调用计数器的正确方法是什么? 772 有某种向量。比方说vector<int> layersArr; 在 for 循环中命名计数器如何正确,以提高代码的可读性? for(int i = 0; i < layersArr.size(); i++); 或者 for(int layer = 0; layer < layersArr.size(); layer++); c++ 3 个回答 Voted Harry 2020-04-03T16:23:05Z2020-04-03T16:23:05Z 迭代器(不是索引!)将像这样正确使用: 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——...... 如果有一条规则——仅以这种方式命名迭代器,而不是其他方式——它将在语言标准中实现:) Best Answer KoVadim 2020-04-03T17:11:30Z2020-04-03T17:11:30Z i,j并且k是循环的公共变量。自 Fortran 以来,这种情况已经持续了 50 年。默认情况下,它们是整数,这对数学家来说是很清楚和显而易见的——记住它们的索引和乘积的数学符号。 因此,在大多数情况下,如果循环很小(20 行,适合屏幕),并且变量i,j和k用作数组索引,那么一切对每个人来说都是显而易见的。但如果突然发现它j被用作第一维度,i第二维度——这将引起怀疑。 如果索引不仅仅是一个索引(它有某种附加实体),那么最好给出一个语义名称。 让我们回到你的例子。 如果循环大小是一两行,那么i这是一个正常的名字,大家都会明白的。如果循环的主体是 5-10 并且里面还有一个循环或者一个复杂的条件,最好让名字语义化。如果主体变得更大,这是考虑进行一些重构的机会。问题归结为以前的问题。 在很多情况下,如果你使用标准的算法库,你可以让它更漂亮。相同的find, find_if,count将删除许多循环。 AlexGlebe 2020-04-03T16:54:07Z2020-04-03T16:54:07Z 一切都取决于情况。如果您在不同的数组上有两个嵌套循环,那么您的头脑中必须不要将索引与数组的名称混淆。 这是不正确的: 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];
迭代器(不是索引!)将像这样正确使用:
或像这样:
甚至像这样:
至于变量的名称——如果你在一个团队中编程——使用修道院的章程,可以说是团队中采用的命名风格。
如果你自己编程——做对你更方便的事情,最重要的是,更容易理解——这样以后你就不会开始痛苦地思考它是什么类型的变量
i5q8_3s——......如果有一条规则——仅以这种方式命名迭代器,而不是其他方式——它将在语言标准中实现:)
i,j并且k是循环的公共变量。自 Fortran 以来,这种情况已经持续了 50 年。默认情况下,它们是整数,这对数学家来说是很清楚和显而易见的——记住它们的索引和乘积的数学符号。因此,在大多数情况下,如果循环很小(20 行,适合屏幕),并且变量
i,j和k用作数组索引,那么一切对每个人来说都是显而易见的。但如果突然发现它j被用作第一维度,i第二维度——这将引起怀疑。如果索引不仅仅是一个索引(它有某种附加实体),那么最好给出一个语义名称。
让我们回到你的例子。
如果循环大小是一两行,那么
i这是一个正常的名字,大家都会明白的。如果循环的主体是 5-10 并且里面还有一个循环或者一个复杂的条件,最好让名字语义化。如果主体变得更大,这是考虑进行一些重构的机会。问题归结为以前的问题。在很多情况下,如果你使用标准的算法库,你可以让它更漂亮。相同的
find,find_if,count将删除许多循环。一切都取决于情况。如果您在不同的数组上有两个嵌套循环,那么您的头脑中必须不要将索引与数组的名称混淆。
这是不正确的:
循环有错误,你不比较,你不添加,索引不是来自那个数组。
你可以这样写: