我在用 C++ 创建二维动态数组时遇到了问题。我希望它具有动态数量(例如 numR)的“行”和固定(例如 2)数量的“列”。
我试过这样做:
const numC = 2;
int numR;
numR = 10;
double *myArray[numC];
myArray = new double[numR];
不幸的是,它不起作用。有可能以这种方式做到吗?
当然,我可以使用 double **myArray
并将其初始化,就好像两个维度都是动态的(使用 numC 作为循环中的限制器),但我想尽可能避免它。
提前致谢。
最佳答案
Is it possible to do it in such a way?
是的:
double (*myArray)[numC] = new double[numR][numC];
// ...
delete[] myArray;
这可能看起来有点不寻常,但 5.3.4 §5 明确指出:
the type of
new int[i][10]
isint (*)[10]
请注意,许多程序员不熟悉 C 声明符语法,也不会理解这段代码。此外,手动动态分配不是异常安全的。由于这些原因,数组 vector 更好:
#include <vector>
#include <array>
std::vector<std::array<double, numC> > vec(numR);
// ...
// no manual cleanup necessary
将 std::array
替换为 std::tr1::array
或 boost::array
,具体取决于您的编译器。
关于c++ - 具有动态行数和固定列数的二维数组的初始化。 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4256817/