1

我有一个这样的数组:

int sizes[5] = {1,2,3,4,5};

我想通过使用上面的数组来拥有 5 个不同的数组。因为我希望我的每个数组的大小为sizes[i] (0 <= i < 5)。我怎样才能做到这一点?我越想这个,我就越糊涂。我必须使用多维数组还是更简单的解决方案?提前致谢。

4

5 回答 5

5

我在线程中要求 STL!

std::vector<int> arrays[5];
for (i = 0; i < 5; ++i)
    arrays[i].resize(sizes[i]);
于 2012-12-05T12:43:55.193 回答
3

据我了解您的问题,您需要长度可以在 [0, 5] 范围内的数组数组(长度可变)。

所以有很多选择,我将为您提供其中 2 个:

  1. 当您用C++标记标记您的问题时,我建议您参考STL,它提供了许多方便的容器,其中之一std::vector动态数组(它的大小可以变化)。

  2. 如果你用C填充方便,那么你可以使用一个指针数组,每个指针都是数组上的指针。

于 2012-12-05T12:45:11.867 回答
1

很简单,你只需要动态内存分配:

int sizes = {1, 2, 3, 4, 5};
int **arrays;
int i;

arrays = new int*[5];
for(i = 0; i < 5; i++)
    arrays[i] = new int[sizes[i]]

这是一个简单的开始,但在现实生活中 STL 库更有用。在这段代码中,内存是动态分配的,但不会被释放。这可能会导致内存泄漏。使用std::vectorfrom STL library 将使您免于麻烦,并提供一种更简单的方法。

@Mikhail 在vector下面展示了使用 s 的良好演示。

于 2012-12-05T12:41:24.253 回答
1

要回答这个问题,是的,在最有效的情况下,您确实需要一个多维数组。一个数组数组,而元素是动态分配的(考虑到您指定的数组数量是恒定的)。

int *Array[5];
for(int i = 0; i < sizes; i++)
{
    Array[i] = new int[sizes[i]];
}

您现在有 5 个动态分配的数组,大小从 0 到 5。

于 2012-12-05T12:41:40.913 回答
1

您必须使用动态分配,如下所示:

int *arrays[5];
int i = 0;
int sizes[] = {1,2,3,4,5};
for(i = 0; i < 5; i++)
{
    arrays[i] = (int *)malloc(sizes[i]);
}
于 2012-12-05T12:43:22.100 回答