遍历数组时,如何将当前元素与前一个元素进行比较?这很容易,除了需要注意的是第一个元素没有前一个元素。是最好的解决方案
for(i = 0; i < arrLen; i++)
{
arr[i] = process(i, someArg);
if(i > 0)
someFunc(arr[i], arr[i-1]);
}
这是需要对数组的每个元素执行的另一个比较,这似乎很浪费。
抱歉,我忘了说正在同时填充数组。所以从 1 开始循环意味着第一个元素是空的。
遍历数组时,如何将当前元素与前一个元素进行比较?这很容易,除了需要注意的是第一个元素没有前一个元素。是最好的解决方案
for(i = 0; i < arrLen; i++)
{
arr[i] = process(i, someArg);
if(i > 0)
someFunc(arr[i], arr[i-1]);
}
这是需要对数组的每个元素执行的另一个比较,这似乎很浪费。
抱歉,我忘了说正在同时填充数组。所以从 1 开始循环意味着第一个元素是空的。
只需从 1 开始循环:
for (int i = 1; i < arrLen; i++)
someFunc(arr[i], arr[i-1]);
编辑:鉴于您的新循环,我认为您的代码还可以。您的优化器可能会处理得很好。如果您真的很担心,只需在循环外执行第一个分配:
arr[0] = process(0, someArg);
for(i = 1; i < arrLen; i++)
{
arr[i] = process(i, someArg);
someFunc(arr[i], arr[i-1]);
}
如果您要这样做,只需从 1 开始计数器。
for (int i = 1 ...)
如果您以另一种方式进行操作,则使用i+1
, 尽快结束计数器 1
for (int i = 1; i < arrLen -1 ; ++i)
我想你有for
实际的代码
for( int i = 1; i < arrLen; i++)
someFunc(arr[i], arr[i-1]);
或者
for( int i = 0; i < arrLen -1; i++)
someFunc(arr[i], arr[i+1]);
从 1 而不是 0 开始你的循环,那么你将永远有一个 i-1
for(i = 1; i < arrLen; i++)
someFunc(arr[i], arr[i-1])
编辑:
鉴于您的新信息,我会说只需将其保留在 if 语句中即可。我认为没有特别好的方法。你可以在循环之外初始化一个 prevVal 变量,但我认为你不会真的比你拥有的 if i > 0 语句获得很多。
您只需要从 0 而是从 1 开始迭代。这是因为0-1=-1
(非法数组索引)
for (int i = 1; i < arrLen; i++)
someFunc(arr[i], arr[i-1]);
第零个元素的分配应该在循环之前完成:
arr[0] = process(0, someArg);
for(i = 1; i < arrLen; i++)
{
arr[i] = process(i, someArg);
someFunc(arr[i], arr[i-1]);
}
而且您可能需要检查是否需要分配第零个元素,因此代码应该是:
if (arrLen)
{
arr[0] = process(0, someArg);
for(i = 1; i < arrLen; i++)
{
arr[i] = process(i, someArg);
someFunc(arr[i], arr[i-1]);
}
}
注意:这样你就不需要使用if
条件,因为i
总是积极的。