可能重复:
How do I best handle dynamic multi-dimensional arrays in C/C++?
我正在开发一个应用程序。因为我需要动态地声明多维数组。使用动态数组大小和值我想要它。请一些人帮我解决这个问题。
提前谢谢
答案 0 :(得分:0)
这取决于你想要的“动态”。
一种方法是:
const size_t outerSize = 15;
const size_t innerSize = 20;
int* arr = new int[outerSize * innerSize];
// To access an item, multiply the row index by the "width", and add the column index
arr[innerSize * 5 + 7] = 13;
// When done with the array:
delete[] arr;
此解决方案的问题在于,即使抛出异常,您也必须非常小心地确保调用delete[] array;
。
如果您不想担心内存管理,并且可以小心不要制作锯齿状数组(或者使用锯齿状数组),那么您可以使用:
std::vector<std::vector<YourType> >
您可以使用如下特定大小对其进行初始化:
const size_t outerSize = 15;
const size_t innerSize = 20;
std::vector<YourType> initalRow(innerSize);
std::vector<std::vector<YourType> > multiDimArray(outerSize, initalRow);
您还可以使用默认的预填充值对其进行初始化:
const size_t outerSize = 15;
const size_t innerSize = 20;
YourType initialValue;
initialValue.ExampleValue = 7;
std::vector<YourType> initalRow(innerSize, initialValue);
std::vector<std::vector<YourType> > multiDimArray(outerSize, initalRow);
就像任何多维数组一样,最简单的填充方法是两个循环:
const size_t outerSize = 15;
const size_t innerSize = 20;
std::vector<YourType> initalRow(innerSize);
std::vector<std::vector<YourType> > multiDimArray(outerSize, initalRow);
for(size_t i = 0; i < outerSize; ++i)
{
for(size_t j = 0; j < innerSize; ++j)
{
multiDimArray[i][j].ExampleValue = i * j;
}
}