相关疑难解决方法(0)

用于迭代2D数组的嵌套循环的哪种排序更有效

在时间(缓存性能)方面,嵌套循环在迭代2D阵列中的哪一个排序更有效?为什么?

int a[100][100];

for(i=0; i<100; i++)
{
   for(j=0; j<100; j++)
   {
       a[i][j] = 10;    
   }
}
Run Code Online (Sandbox Code Playgroud)

要么

for(i=0; i<100; i++)
{
   for(j=0; j<100; j++)
   {
      a[j][i] = 10;    
   }
}
Run Code Online (Sandbox Code Playgroud)

c performance for-loop cpu-cache

72
推荐指数
5
解决办法
7078
查看次数

嵌套循环的效率

请参阅以下代码段:

    Long first_begin = System.currentTimeMillis();

    // first nested loops
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 1000000; j++) {
            // do some stuff
        }
    }
    System.out.println(System.currentTimeMillis() - first_begin);
    // second nested loops
    Long seconde_begin = System.currentTimeMillis();
    for (int i = 0; i < 1000000; i++) {
        for (int j = 0; j < 10; j++) {
            // do some stuff
        }
    }
    System.out.println(System.currentTimeMillis() - seconde_begin);
Run Code Online (Sandbox Code Playgroud)

我想知道为什么第一个嵌套循环比第二个嵌套循环慢?

问候!

重要的提示!:我很抱歉,当我第一次提出这个问题时,我意外地将变量j从1开始,我做了修正.

更新:循环中没有任何特定的逻辑,我只是​​做一些测试,实际上这是一个在面试中提出的问题,面试官提示我改变循环的顺序以获得更好的性能.顺便说一句,我使用的是JDK1.5.经过一些测试我现在更加困惑,因为程序的结果不一致---有时第一个循环比第二个循环运行得快,但大部分时间它比第二个循环运行得慢.

nested-loops

7
推荐指数
2
解决办法
5761
查看次数

按位掉掉()是个坏主意的例子?

您不应该将对象指针视为OOP语言(包括C++)中原始二进制数据的指针.对象"超过"它们的表示.

因此,例如,swap通过交换字节来处理两个对象是不正确的:

template<class T>
void bad_swap(T &a, T &b)  // Assuming T is the most-derived type of the object
{
    char temp[sizeof(T)];
    memcpy(temp, &a, sizeof(a));
    memcpy(&a, &b, sizeof(b));
    memcpy(&b, temp, sizeof(temp));
}
Run Code Online (Sandbox Code Playgroud)

然而,唯一的情况是,我可以想象这个导致问题的快捷方式是当一个对象包含一个指向自身的指针时,我很少(从不?)在实践中看到它; 但是,也可能是其他情景.

swap如果你执行按位交换,什么是正确会破坏的实际(真实世界)示例?
我可以很容易地用自我指针提出人为的例子,但我想不出任何真实的例子.

c++ swap bit-manipulation

7
推荐指数
2
解决办法
1200
查看次数