我考虑过在比赛编程中使用这个快捷方式.我定义了一个函数:
private static int[] range(int n) {
int[] ret = new int[n];
for (int i = 0; i < n; i++) {
ret[i] = i;
}
return ret;
}
所以我可以稍微更快地编写我的for循环,并且看起来稍微整洁(扫描代码时):
for (int i: range(n)) { doit(i); }
代替:
for (int i = 0; i < n; i++) { doit(i); }
这种方法是否有任何重大的性能问题,它们是什么?
代码有一个计算解决方案的时间限制,但使用正确的算法通常可以在一小部分时间内完成此操作.范围函数在O(n)中运行,因为无论如何我们将运行O(n)循环,时间复杂度没有增加.垃圾收集怎么样?还有别的什么我想不到的?
我将确定我以后是否真的喜欢使用此方法,并且如果在比赛开始时输入功能是值得的.请不要回答关于风格的问题. (竞争编码产生了一些你见过的最糟糕的代码,但它是关于按时完成它并且再也不会再看它的了.)
为了澄清,实际编码时间在本次比赛中至关重要,我们不能带来预先编码的代码.这通常意味着没有代码片段.在匆忙和凌乱的编码环境中,foreach将使循环更快,更容易出错.它是C中宏的替代品.