0

在函数内部,我创建了一个二维数组,该数组从文本文件中填充自身并需要返回给 main。该数组在整个程序中保持恒定大小。

我知道这是经常被问到的问题,但我似乎总是得到以下两个答案之一:

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

或者

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

与实际代码相比,我在指针和 std::things 的概念上遇到了更多麻烦,因此,如果您知道有一个网站解释得特别好,请随意提出。

4

3 回答 3

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

于 2013-08-27T01:23:47.210 回答
1

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

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

这里有一些相关的解释。当我发现更多时,我会添加它们:

于 2013-08-27T00:11:26.000 回答
0

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

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

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

C理解使用集合和C++除非使用std::集合的指针非常重要。即便如此,指针仍然很普遍,不正确的使用可能会对程序造成毁灭性的影响。

于 2013-08-27T00:15:30.273 回答