在c ++中动态初始化多维数组

时间:2011-07-15 05:03:01

标签: visual-c++

  

可能重复:
  How do I best handle dynamic multi-dimensional arrays in C/C++?

我正在开发一个应用程序。因为我需要动态地声明多维数组。使用动态数组大小和值我想要它。请一些人帮我解决这个问题。

提前谢谢

1 个答案:

答案 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;
  }
}