C++ 从C+返回二维数组+;

C++ 从C+返回二维数组+;,c++,arrays,pointers,stdarray,C++,Arrays,Pointers,Stdarray,在一个函数中,我创建了一个2d数组,该数组从文本文件填充自身,需要返回到main。在整个程序中,数组的大小保持不变 我知道这是一个经常被问到的问题,但我似乎总是得到两个答案中的一个: 使用std::vector或std::array或其他std函数。我真的不明白这些是如何工作的,是否有任何网站真正解释了它们,以及它们与普通阵列相比是如何工作的?有什么我需要的特别套餐吗 或 使用指向数组的指针,然后返回指针。首先,对于这个问题的一些答案,由于本地数组的原因,它显然不起作用。我如何判断它何时起作用和

在一个函数中,我创建了一个2d数组,该数组从文本文件填充自身,需要返回到main。在整个程序中,数组的大小保持不变

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

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

使用指向数组的指针,然后返回指针。首先,对于这个问题的一些答案,由于本地数组的原因,它显然不起作用。我如何判断它何时起作用和何时不起作用?如何在主函数中使用此数组


我在指针和STD的概念上有更多的困难::事情比实际的代码要多,所以如果有一个你知道的网站特别解释它,就随便说吧。< /P> < P>听起来你是C++新手。如果确实如此,我建议现在使用数组,因为您可能不会使用STL容器提供的任何内容。现在,让我们谈谈指针

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

以下是一些相关的解释。当我发现更多信息时,我将添加这些内容:


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

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

    以下是一些相关的解释。当我发现更多信息时,我将添加这些内容:


    创建二维阵列的最简单方法如下:

    char (*array)[10];
    array = new array[5][10];
    
    二维数组可能很难声明。变量声明中上面的括号很重要,可以告诉编译器
    array
    是指向10个字符数组的指针


    理解带有
    C
    C++
    的指针非常重要,除非使用
    std::
    集合。即使如此,指针仍然非常普遍,不正确的使用可能会对程序造成破坏。

    创建2d数组的最简单方法如下:

    char (*array)[10];
    array = new array[5][10];
    
    二维数组可能很难声明。变量声明中上面的括号很重要,可以告诉编译器
    array
    是指向10个字符数组的指针


    理解带有
    C
    C++
    的指针非常重要,除非使用
    std::
    集合。即使如此,指针仍然非常普遍,不正确的使用可能会对程序造成破坏。

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

    #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";
            }
        }
    }
    
    #包括
    #包括
    使用array2D=std::vector;
    array2D MyFunc(整数x_大小,整数y_大小)
    {
    array2D数组(y_大小,向量(x_大小));
    int i=0;
    对于(int y=0;ycout不一定是最好的解决方案,但却是让它与向量一起工作的最简单的方法。其优点是不需要删除内存(自动发生),并且在大多数编译器的调试模式下都会检查数组的边界

    #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";
            }
        }
    }
    
    #包括
    #包括
    使用array2D=std::vector;
    array2D MyFunc(整数x_大小,整数y_大小)
    {
    array2D数组(y_大小,向量(x_大小));
    int i=0;
    对于(int y=0;y如果我做对了就不能:返回一些新分配的-不好。如果我做对了,请使用一些共享/唯一指针。返回一些新分配的-不好。使用一些共享/唯一指针,即使你不知道行数,你知道列数吗?“正常”数组实际上是行为不正常的数组。传递和返回一个
    std::string
    std::vector
    与传递一个简单的
    float
    差不多。我相信您已经