如何创建不等长数组的数组?

时间:2010-01-05 11:50:56

标签: arrays visual-c++

我需要创建一种2D数组,其中每个辅助数组的长度都不同。我有一个已知长度的一维数组(定义了要形成的数组的数量),每个元素的数字表示该位置的二级数组的长度。

每个阵列都相当大,所以我不想创建一个适合所有“假”的2D堆阵列来覆盖所有内容。

我将如何做到这一点?我之前制作的任何2D数组都是矩形的。

我正在尝试这样做,以便我可以创建一些代码来动态生成线程以分割一些工作负载。

谢谢,

-Faken

4 个答案:

答案 0 :(得分:2)

std :: vectors的std :: vector - 用于整数:

#include <vector>
std::vector <std::vector <int> > v2d;

答案 1 :(得分:2)

您可以执行以下操作:

int **array = new int*[3];
array[0] = new int[5];
array[1] = new int[2];
array[2] = new int[11];

使用array后,请不要忘记正确解除分配。

编辑:

您可以通过以下方式将辅助指针初始化置于循环中:

int cells[] = {5,2,11};
int **array = new int*[3];
for (int i = 0; i < 3; i++){
  array[i] = new int[cells[i]];
}

PS:我个人更喜欢在需要多维数组时使用Boost.MultiArray。您可能还想查看它。

答案 2 :(得分:0)

某种稀疏数组在这里可能会有所帮助。堆栈溢出时有this questionthis site

祝你好运。

答案 3 :(得分:0)

或者如果你想更多地考虑C(有数以万计的人编写C代码,但用C ++编译它,那大部分都有效):

声明不是二维数组:int arr[rows][cols]

但是指向数组的一维指针数组:int (arr*)[rows]

对这种语法不太确定,如果我错了请有人纠正我!