我很难理解简单的逻辑,因为数组从0开始。我将大量简化我的问题:
我有一个大小为5的数组。索引如下: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]
将会越界。我怎样才能正确地构造它呢?
发布于 2019-06-25 09:01:58
它不会越界的。如果x + incr
确实为>= size
,则for
条件将失败,并且不会在其中执行语句。
发布于 2019-06-25 09:18:05
通常,size
必须使用len
方法或length
属性(或您的编程语言支持的任何东西)来计算,但是,在这种情况下,我可以看到您通过提供size = 5
手动指定了它,因此如果数组a
的实际长度小于5
和x + incr >= 5
,它应该会导致出站错误
发布于 2019-06-25 21:15:42
你可能正在使用一个带有花哨的扩展的编译器,它支持随机的东西,但是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
。
还有其他方法可以使用迭代器、转换、标准库等来解决这个问题。
https://stackoverflow.com/questions/56745537
复制相似问题