我需要创建一种2D数组,其中每个辅助数组的长度都不同。我有一个已知长度的一维数组(定义了要形成的数组的数量),每个元素的数字表示该位置的二级数组的长度。
每个阵列都相当大,所以我不想创建一个适合所有“假”的2D堆阵列来覆盖所有内容。
我将如何做到这一点?我之前制作的任何2D数组都是矩形的。
我正在尝试这样做,以便我可以创建一些代码来动态生成线程以分割一些工作负载。
谢谢,
-Faken
答案 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 question或this site。
祝你好运。答案 3 :(得分:0)
或者如果你想更多地考虑C(有数以万计的人编写C代码,但用C ++编译它,那大部分都有效):
声明不是二维数组:int arr[rows][cols]
但是指向数组的一维指针数组:int (arr*)[rows]
对这种语法不太确定,如果我错了请有人纠正我!