【发布时间】:2012-11-02 14:21:45
【问题描述】:
(注意:我目前正在学习 C++,所以如果有更好的方法来做我正在做的事情,解释会很有帮助。)
我正在用 C/C++ 制作康威的生命游戏,并有以下代码:
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 中做到这一点,我会更喜欢。
【问题讨论】:
-
我只是在您评论时添加了一条注释。在我学习的过程中,两者的答案对我(以及在搜索中偶然发现这个问题的任何人)来说都是最有用的,但我主要关注 C。
-
没有 C/C++ 这样的东西。正如丹尼斯所说,要么是一个,要么是另一个。如果您正在“学习 C++”,我不知道您为什么要为此使用纯 C。
-
我们一直在学习 C++,现在正在学习 C(C++ 然后是 C,因为它更接近于 Java,这是他们去年教给我们的)。我们可以在这个任务中使用任何一个(我正在通过制作一个二维元胞自动机来扩展它)。
-
在 C++ 中,可以像这样在一行中实现交换:cplusplus.com/reference/algorithm/swap 不过,这可能不是您想要的,因为它“涉及复制构造和两个赋值操作”,这可能很昂贵。
-
问题在于 C++ 不仅仅是具有“C++ 特定特性”的 C。是的,许多语言特性源自 C,并且包含了整个 C 库,但是编写 C++ 需要了解该语言的习语和最佳实践。有许多新的更好的方法可以做你可以用 C 做的事情,事实上,语言的许多基础知识多年来已经发展和变化,使其与 C 不兼容。你真正想要的是类似 C 的 C++ 但给出这样的答案确实对任何人都没有帮助。但是,如果您想要 C 答案或 C++ 答案,我们可以做到。
标签: c++ c pointers multidimensional-array