二维数组参数有什么区别?

时间:2014-08-02 10:55:46

标签: c++ multidimensional-array

在这里,我可以像这样声明一个二维数组

int dp[105][140000] 

或者像这样

int dp[140000][105]

当我使用这个数组时,我发现第一个和第二个之间存在显着的时间差异。第一个比第二个更快。这是为什么? 例如我正在运行的代码

    for(int i=1;i<=n;++i)
    for(int k=1;k<60;++k)
    {
        int x = (~fact[k]) & ((1<<17)-1);
        for(int s=x;s;s=(s-1)&x)
        {
            if(dp[i-1][s]+abs(A[i]-k) < dp[i][s|fact[k]])
            {
                dp[i][s | fact[k]] = dp[i-1][s] + abs(A[i]-k);
                dpchoosen[i][s|fact[k]] = k;
                dptracer[i][s|fact[k]] = s;

            }


        }

    }

1 个答案:

答案 0 :(得分:2)

我认为差异与第二个相关,有更多的计算来确定行的偏移量。 我的假设是基于行的地址计算比行内元素的地址计算更复杂。 在任何情况下,您都应该看到编译器生成的汇编代码。