从C ++返回2d数组

时间:2013-08-27 00:03:52

标签: c++ arrays pointers stdarray

在一个函数中,我创建了一个二维数组,它从文本文件中填充并需要返回到main。数组在整个程序中保持不变的大小。

我知道这是一个被问到很多的东西,但我似乎总是得到两个答案之一:

使用std :: vector或std :: array或其他一些STD函数。我真的不明白这些是如何工作的,是否有任何网站实际解释它们以及它们与普通数组相比如何行动?是否有我需要的特殊#include?

或者

使用指向数组的指针,并返回指针。首先,在一些答案上,由于本地数组,它显然不起作用。我怎么知道它什么时候起作用?如何在主函数中使用此数组?

我对指针和std ::的概念比实际代码更麻烦,所以如果有一个你知道的网站解释得特别好,请随意放一下。

3 个答案:

答案 0 :(得分:3)

不一定是最好的解决方案,但最简单的方法是使用矢量。优点是您不需要删除内存(自动发生),并且在大多数编译器上以调试模式对数组进行边界检查。

#include <vector>
#include <iostream>

using array2D = std::vector< std::vector< int > >;

array2D MyFunc(int x_size, int y_size)
{
    array2D array(y_size, vector< int >(x_size));

    int i = 0;
    for (int y = 0; y < array.size(); y++)
    {
        for (int x = 0; x < array[y].size(); x++)
        {
            // note the order of the index
            array[y][x] = i++;
        }
    }

    return array;
}

int main()
{
    array2D bob = MyFunc(10, 5);
    for (int y = 0; y < bob.size(); y++)
    {
        for (int x = 0; x < bob[y].size(); x++)
        {
            cout << bob[y][x] << "\n";
        }
    }
}

实例: http://ideone.com/K4ilfX

答案 1 :(得分:0)

听起来你是C ++的新手。如果确实如此,我建议现在使用数组,因为你可能不会使用STL容器给你的任何东西。现在,我们来谈谈指针。

如果在函数中声明了一个本地数组,那么主函数将无权访问它。但是,如果您使用new关键字动态分配数组,则情况并非如此。使用new分配数组时,实质上是告诉编译器为程序保留一块内存。然后,您可以使用指针访问它,这实际上只是您保留的那块内存的地址。因此,您需要做的就是将指针(地址)传递给该数组,而不是将整个数组传递给main函数。

以下是一些相关的解释。当我发现更多时,我会添加它们:

答案 2 :(得分:0)

创建二维数组的最简单方法如下:

char (*array)[10];
array = new array[5][10];

二维数组可能很难申报。变量声明中的括号是很重要的,告诉编译器array是一个指向10个字符数组的指针。

除非使用C集合,否则了解C++std::的指针非常重要。即便如此,指针也很普遍,不正确的使用对程序来说可能是毁灭性的。