我有一个这样的数组:
int sizes[5] = {1,2,3,4,5};
我希望使用上面的数组有5个不同的数组。因为我希望每个数组的大小都为sizes[i]
(0 <= i <5)。我怎样才能做到这一点?我越是思考这个问题,我就越困惑。我是否必须使用多维数组或仅使用更简单的解决方案?提前致谢。
答案 0 :(得分:5)
我在线程中要求STL!
std::vector<int> arrays[5];
for (i = 0; i < 5; ++i)
arrays[i].resize(sizes[i]);
答案 1 :(得分:3)
据我所知,你需要一组数组,其长度可以在[0,5]范围内(可变长度)。
所以有很多选择,我会为你提供2个:
当您使用 C ++ 标记标记您的问题时,我建议您参考 STL ,它提供了许多方便的容器,其中一个是{{ 1}} 动态数组(大小可能会有所不同)。
如果您使用 C 填充方便,则可以使用指针数组,每个指针都将指向数组。
< / LI> 醇>答案 2 :(得分: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库更有用。在此代码中,内存是动态分配的,但未释放。这可能导致内存泄漏。使用STL库中的std::vector
可以避免麻烦,并提供更简单的方法。
@Mikhail已经展示了使用下面vector
的充分证明。
答案 3 :(得分:1)
回答这个问题,是的,你需要在最有效的情况下使用多维数组。一个数组数组,而元素是动态分配的(考虑到你指定的数组的数量是不变的)。
int *Array[5];
for(int i = 0; i < sizes; i++)
{
Array[i] = new int[sizes[i]];
}
现在你有5个动态分配的数组,范围从0到5。
答案 4 :(得分: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]);
}