对阵列的困惑

时间:2012-12-05 12:36:34

标签: c++ arrays multidimensional-array

我有一个这样的数组:

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

我希望使用上面的数组有5个不同的数组。因为我希望每个数组的大小都为sizes[i] (0 <= i <5)。我怎样才能做到这一点?我越是思考这个问题,我就越困惑。我是否必须使用多维数组或仅使用更简单的解决方案?提前致谢。

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个:

  1. 当您使用 C ++ 标记标记您的问题时,我建议您参考 STL ,它提供了许多方便的容器,其中一个是{{ 1}} 动态数组(大小可能会有所不同)。

  2. 如果您使用 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]);
}