数组时循环逻辑的基本概念?

时间:2019-06-25 00:55:41

标签: c++ arrays for-loop

由于数组以0开头,因此我难以理解简单的逻辑。我将通过Massivley简化我的问题:

我有一个大小为5的数组。索引如下:[0],[1],[2],[3],[4]。增量为2。 我需要检查每个增量之间的元素之间的差异。

//So the result I want:
var1 = a[2] - a[0]
var2 = a[4] - a[2].
//My for loop:
incr = 2;
size = 5;
for (x = 0; x + incr < size; x+= incr)
    var[] = a[x + incr] - a[x]

此for循环因a[x + incr]超出范围而失败。我该如何正确构造?

4 个答案:

答案 0 :(得分:2)

这不会超出范围。如果x + incr确实是>= size,则for条件将失败并且不执行其中的语句。

答案 1 :(得分:1)

通常,size必须使用len方法或length属性(或您的编程语言支持的任何属性)来计算,但是在这种情况下,我可以看到您是通过以下方式手动指定的:给定size = 5,因此如果数组a的实际长度小于5x + incr >= 5,则应该导致出界错误

答案 2 :(得分:0)

  

我该如何正确构造它?

如果您使用过std::adjacent_difference,则无需编写循环:

#include <numeric>
#include <iostream>

int main()
{
   int a[5] = {1,7,9,2,5};
   int b[5];
   std::adjacent_difference(a, a + 5, b);
   for (auto i : b)
     std::cout << i << " ";
}

输出:

1 6 2 -7 3 

答案 3 :(得分:0)

您可能正在使用带有高级扩展名的编译器,该扩展名支持随机事物,但是var[] = a[x + incr] - a[x]这不是有效的标准语法。由于您没有解释实际失败的原因,因此我假设失败是在这一行。首先,将var定义为所需的大小和类型。在这种情况下,我假设您想要一个大小为2的整数数组,因为要计算大小为5的数组有2个实例。

int var[2];

然后在数组中使用索引将值放入它们所属的var中,请记住增加位置。

int place_index = 0;
for (x = 0; x + incr < size; x+= incr){
    var[place_index] = a[x + incr] - a[x];
    place_index++;
}

然后您可以显示结果

for (x = 0; x < 2; x++)
    std::cout << var[x] << ' ';

给出a[5] = {0,1,2,3,4},将显示2 2。给定a[5] = {0,2,4,6,8},将打印4 4。给定a[5] = {0, 2, 8, 32, 128},将显示8 120

还有其他方法可以使用迭代器,转换,标准库等来解决此问题。