c - 如何在 C 中以常数时间交换两个矩阵?

标签 c

目前,我正在使用逐个元素交换的迭代方法,这似乎非常低效。是否可以在常数时间内交换两个二维数组?

int a[20][100];
int b[20][100];

我想在 O(1) 中交换 ab

此外,如果我只想将 b 覆盖为 a,是否可以应用相同的解决方案?

下面是我用来用“b”迭代覆盖“a”的代码。

下面的代码用于用 b 覆盖 a:

for(x = 0;x<row;x++){
    for(y=0;y<col;y++){ 
       a[x][y] = b[x][y];
    }
}

下面是我用来交换 a 和 b 的代码:

for(x = 0;x<row;x++){
    for(y=0;y<col;y++){ 
       temp = a[x][y];
       a[x][y] = b[x][y];
       b[x][y] = temp;
    }
}

最佳答案

您需要将它们存储为指针。例如:

int a_store[20][100];
int b_store[20][100];

int (*a)[20][100] = &a_store;
int (*b)[20][100] = &b_store;

现在很容易交换它们。您也可以在堆上分配它们,或在 C++ 中使用 std::vector

关于c - 如何在 C 中以常数时间交换两个矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44309293/

相关文章:

c - 不明白为什么 116+14 = -126 (CS50)

c++ - 跟踪/系统调用 "Print Screen"进程

c++ - tcmalloc ReleaseFreeMemory() 没有正确释放内存

c - 有什么方法可以解决段错误吗?

c - 在结构中使用 pthread 条件变量数组

c - 如何接受字符或字符串作为输入

c - 无法将 '#' 字符作为命令行参数传递

c++ - 什么是 void* 以及它可以指向哪些变量/对象

c - 简单的 while 循环

c - C 中的单例模式