由于数组以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]
超出范围而失败。我该如何正确构造?
答案 0 :(得分:2)
这不会超出范围。如果x + incr
确实是>= size
,则for
条件将失败并且不执行其中的语句。
答案 1 :(得分:1)
通常,size
必须使用len
方法或length
属性(或您的编程语言支持的任何属性)来计算,但是在这种情况下,我可以看到您是通过以下方式手动指定的:给定size = 5
,因此如果数组a
的实际长度小于5
和x + 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
。
还有其他方法可以使用迭代器,转换,标准库等来解决此问题。