C++ 在两个范围内循环的更好方法是什么?将它们相乘并循环一次,或者分别在每个范围内循环?
我无法决定如何在范围内循环。这样:C++ 在两个范围内循环的更好方法是什么?将它们相乘并循环一次,或者分别在每个范围内循环?,c++,c,loops,C++,C,Loops,我无法决定如何在范围内循环。这样: for (int i = 0; i < max_i; i++) { for (int j = 0; j < max_j; j++) { // first way - two loops } } for(int i=0;i
for (int i = 0; i < max_i; i++) {
for (int j = 0; j < max_j; j++) {
// first way - two loops
}
}
for(int i=0;i
或者这样:
for (int k = 0; k < max_i*max_j; k++) {
// second way - one loop
}
for(int k=0;k
谢谢,Boda Cydo。取决于你在循环中做了什么。你需要指数i和j吗?那么我更喜欢第一种解决方案。取决于您在循环中所做的工作。你需要指数i和j吗?那么我更喜欢第一种解决方案。这要看情况而定。 如果您想要单独的索引,那么可以使用第一个索引。 如果您只需要一个单一索引,则需要第二个索引 这两个循环的复杂性是相同的。这取决于具体情况。 如果您想要单独的索引,那么可以使用第一个索引。 如果您只需要一个单一索引,则需要第二个索引
两个循环的复杂性是相同的。如果您决定使用第一种方法,那么一切都很好,因为您同时拥有
i
和j
的值。第二种方法是,您必须手动获取i
和j
的值:
for (int k = 0; k < max_i*max_j; k++) {
i = k / max_j;
j = k % max_j;
....
}
for(int k=0;k
因此,在您的情况下,第一种方法肯定更好。如果您决定使用第一种方法,那么一切都很好,因为您同时具有
i
和j
的值。第二种方法是,您必须手动获取i
和j
的值:
for (int k = 0; k < max_i*max_j; k++) {
i = k / max_j;
j = k % max_j;
....
}
for(int k=0;k
因此,对于您的情况,第一种方法肯定更好。这取决于您将如何处理索引。如果分别使用两个值(例如,在两个循环中迭代所有值的排列),则两个循环的解决方案更清晰。如果您不关心单个值,而只关心它们的产品,那么单循环策略会更好
无论哪种方式,都要选择能更清楚地表达你意图的策略。与维护代码的简单性的重要性相比,性能影响微不足道。这取决于您将如何使用索引。如果分别使用两个值(例如,在两个循环中迭代所有值的排列),则两个循环的解决方案更清晰。如果您不关心单个值,而只关心它们的产品,那么单循环策略会更好
无论哪种方式,都要选择能更清楚地表达你意图的策略。与维护代码的简单性的重要性相比,性能影响微不足道。如果使用2D数组,第一个数组的可读性要高得多。在过去,用1D模拟2d阵列在某种程度上是很常见的,但在本例中,第一个阵列更具可读性 如果使用2D数组,则第一个数组的可读性要高得多。在过去,用1D模拟2d阵列在某种程度上是很常见的,但在本例中,第一个阵列更具可读性 显然,如果您有选择权,在循环过程中不需要精确的i和j值 因此,第二个选项更好,可读性更强(缩进更少)。您可以进行一些优化(以避免在每次循环迭代中进行乘法):
int-iKMax=max\u i*max\u j;
对于(int k=0;k
并且总是在循环(++k)中使用前缀操作符,因为无论对象迭代什么,它都会保存该对象的一个副本。(C++编码标准:101个规则、指南和最佳实践由Habor萨特和Andrei Alexandrescu) < P>显然,如果你有选择,你不需要在循环中精确地定义I和J。 因此,第二个选项更好,可读性更强(缩进更少)。您可以进行一些优化(以避免在每次循环迭代中进行乘法):
int-iKMax=max\u i*max\u j;
对于(int k=0;k
并且总是在循环(++k)中使用前缀操作符,因为无论对象迭代什么,它都会保存该对象的一个副本。(参见C++编码标准:Habor萨特和Andrei Alexandrescu的101条规则、准则和最佳实践)< P> >当代码> Max I I/<代码>或/和
int
是有符号类型。如果sizeof(int)
等于4字节,那么在max_i=32768
和max_j=65536
的情况下,循环将执行零次
如果没有特殊要求,我更喜欢第一个变量,因为它更可读。当
max\u I
或/和max\u j
足够大时,不能使用第二个变量。请注意,int
是有符号类型。如果sizeof(int)
等于4字节,那么在max_i=32768
和max_j=65536
的情况下,循环将执行零次
如果没有特殊要求,我更喜欢第一个变量,因为它更可读。第一个循环更好,至少有两个原因:
另外,请探讨循环索引变量是“int”还是“size\t”。大小\u t保证始终为正第一个循环更好,至少有两个原因: