为什么我在输入超出范围例外时出现错误?
问题描述:
int bNum=3;
int aNum=3;
for (int i = 0; i < bNum; i++)
{
for (int j = 0; j < aNum; j++)
{
b[i] += a[j];
b[i + 1] += a[j + 3];
b[i + 2] += a[j + 6];
}
}
我基本上希望发生的以下内容:为什么我在输入超出范围例外时出现错误?
b[0]=a[0]+a[1]+a[2];
b[1]=a[3]+a[4]+a[5];
b[2]=a[6]+a[7]+a[8];
什么是错我的逻辑是什么?
哈哈! OOPS!我困倦的眼睛正在解释这个愚蠢的问题。我发现在每次迭代中它都会被多次计算。
答
它是任何一种语言,你需要为B常数指数,可变折射率的
for (int j = 0; j < aNum; j++)
{
//here is loop-unrolling for b
b[0] += a[j];
b[1] += a[j + 3];
b[2] += a[j + 6];
}
for(k=0;k<max;k++)
{
for (int j = 0; j < aNum; j++)
{
//without loop-unrolling
b[k] += a[j+k*3];
}
}
我所做的“K”环外让它读一个为连续[]越好。你可以在内部做“k”循环,但是它会使[]从这里跳到那里,然后再次跳回到这里,这会让它变慢。 这不是一个矢量虽然:我只是用它来填补空间
+0
谢谢!我真的很累,不能直视。但我喜欢你的矢量化的想法! – 2012-07-31 09:56:42
答
这个问题是一种矛盾词典。 两个数组的长度长度相等,但要求不相等。
假设的requeirement是正确的,你可以做以下
每b
元素有一个总和的a
int bNum=3;
int aIndex = 0;
for (int i = 0; i < bNum; i++)
{
for (int j = 0; j < 3; j++)
b[i] += a[aIndex ++];
}
的下一个 3个要素
这里没有任何数组边界控制。这只是一个示例自然代码。
如果这不是你正在寻找的,请澄清。
数组的大小是多少?那'i + 3'可能会超过它。 – 2012-07-31 09:45:29
C++或C#?..... – Nawaz 2012-07-31 09:45:43
您正在使用'b [i + 6]'作为索引。我假设你的意思是'b [2] = a [j + 6]' – dtsg 2012-07-31 09:47:57