在C 中交换多维阵列
Swap multi-dimensional arrays in C++
(注意:我目前正在学习C ,因此,如果有更好的方法来做我正在做的事情,解释将是有帮助的。)
我正在用C/C 制作Conway的生活游戏,并具有以下代码:
bool ** previous;
bool ** current;
void init() {
previous = new bool*[width];
current = new bool*[width];
for (int i =0; i < width; i++) {
previous[i] = new bool[height];
current[i] = new bool[height];
}
}
动态数组的原因是用户在运行时给出宽度和高度。如果我有一维数组,我可以做以下操作:
bool * previous;
bool * current;
void () {
bool * temp = current;
current = previous;
previous = temp;
}
但是,这种方法无法正如二维数组所希望的那样起作用。从技术上讲,这是一系列数组,我是否必须单独交换每个子阵列指针?定义多维数组并交换它们有更好的方法吗?
编辑:我尚未真正使用任何C 特定功能,因此,如果我可以在纯C中这样做,我更喜欢。
这里没有真正的理由来打扰一系列数组。正确维护和破坏还有更多的工作,尤其是当您避免使用标准库容器时,该容器可以为您处理许多内存管理。
通常更容易在单个数组中分配width * height
单元格,并像cell[x + width * y]
一样引用x
是您的列,y
是您的行。
请记住,在此问题的特定情况下,您想要的是一系列碎片,而不是一系列布尔人。C 确实有一个值得使用的比特集的特殊情况容器: std::vector<bool>
。
这有效:
int arr1[10][10],arr2[10][10]
//Swap 2nd row between arrays
std::swap(arr1[2], arr2[2]);
如果是c 使用std::vector
的s,而忘记了堆的分配,纯数组,为它们的memcpy并复制/分配运算符。
而不是使用您的数组数组,为什么不使用大小width*height
的一维数组?
只需通过y*width + x
访问您的元素即可。
像往常一样,用malloc(width*height*sizeof(bool))
分配数组。这应该足以解决您的问题
虽然较早的答案在技术上是正确的,但它们似乎没有回答您的原始问题。您说:"这种方法不如二维阵列所希望的那样起作用",但是为什么不工作?
void () {
bool ** temp = current;
current = previous;
previous = temp;
}
如果您不介意使用C 功能std ::交换函数非常方便:
std::swap(current, previous);
- OpenMP阵列性能较差
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 当我的阵列太大时出现分段错误
- C++嵌套if语句,基本货币交换
- shell排序中的交换和比较
- 位阵列上的快速AND运算
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 通过交换元素使数组相同
- 阵列必须使用大括号封闭的初始器进行初始化
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- 交换运算符 + 重载会导致无限递归
- 没有从阵列<float>到阵列<int>的可行转换
- 使用Boost交换Python和C numpy阵列
- 用反向对角线交换2D阵列最小行值
- 在C 中交换多维阵列
- 阵列相邻位置交换程序需要提示
- 打印出未交换的阵列
- 交换两个阵列而不完全分配第三个 (C++)
- 使用交换方法x86 MASM反转程序集中的外部阵列
- 如何交换2D阵列的最大和最小成员索引