为什么输入超出范围异常时会出现错误?

时间:2012-07-31 09:43:37

标签: c# c++ algorithm logic

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];

我的逻辑出了什么问题?

HAHA! OOPS!我困倦的眼睛是一个愚蠢的问题。我看到在每次迭代时都会多次计算。

2 个答案:

答案 0 :(得分:7)

无论它是什么语言,你都需要为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”循环设为外部,让它尽可能连续地读取a []。你可以在内部制作“k”循环,但是它会从这里读到[]跳到那里然后再次回到这里再次跳跃,这使得它变慢。 这不是矢量:P我只是用它填充空间

答案 1 :(得分:1)

这个问题有点矛盾。 两个数组的长度是相等的,但要求不相等。

假设 重新发送是正确的,您可以执行以下操作

对于每个b元素,a

next 3个元素都有 sum
int bNum=3;    
int aIndex = 0;
for (int i = 0; i < bNum; i++)
{
   for (int j = 0; j < 3; j++)      
       b[i] += a[aIndex ++];

}

此处没有任何数组边界控件。这自然只是一个示例代码。

如果这不是您要搜索的内容,请澄清。