我有一个这样的数组:
int sizes[5] = {1,2,3,4,5};
我想通过使用上面的数组来拥有 5 个不同的数组。因为我希望我的每个数组的大小为sizes[i]
(0 <= i < 5)。我怎样才能做到这一点?我越想这个,我就越糊涂。我必须使用多维数组还是更简单的解决方案?提前致谢。
我有一个这样的数组:
int sizes[5] = {1,2,3,4,5};
我想通过使用上面的数组来拥有 5 个不同的数组。因为我希望我的每个数组的大小为sizes[i]
(0 <= i < 5)。我怎样才能做到这一点?我越想这个,我就越糊涂。我必须使用多维数组还是更简单的解决方案?提前致谢。
我在线程中要求 STL!
std::vector<int> arrays[5];
for (i = 0; i < 5; ++i)
arrays[i].resize(sizes[i]);
据我了解您的问题,您需要长度可以在 [0, 5] 范围内的数组数组(长度可变)。
所以有很多选择,我将为您提供其中 2 个:
当您用C++标记标记您的问题时,我建议您参考STL,它提供了许多方便的容器,其中之一std::vector
是动态数组(它的大小可以变化)。
如果你用C填充方便,那么你可以使用一个指针数组,每个指针都是数组上的指针。
很简单,你只需要动态内存分配:
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::vector
from STL library 将使您免于麻烦,并提供一种更简单的方法。
@Mikhail 在vector
下面展示了使用 s 的良好演示。
要回答这个问题,是的,在最有效的情况下,您确实需要一个多维数组。一个数组数组,而元素是动态分配的(考虑到您指定的数组数量是恒定的)。
int *Array[5];
for(int i = 0; i < sizes; i++)
{
Array[i] = new int[sizes[i]];
}
您现在有 5 个动态分配的数组,大小从 0 到 5。
您必须使用动态分配,如下所示:
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]);
}