C++ 从C+返回二维数组+;
在一个函数中,我创建了一个2d数组,该数组从文本文件填充自身,需要返回到main。在整个程序中,数组的大小保持不变 我知道这是一个经常被问到的问题,但我似乎总是得到两个答案中的一个: 使用std::vector或std::array或其他std函数。我真的不明白这些是如何工作的,是否有任何网站真正解释了它们,以及它们与普通阵列相比是如何工作的?有什么我需要的特别套餐吗 或 使用指向数组的指针,然后返回指针。首先,对于这个问题的一些答案,由于本地数组的原因,它显然不起作用。我如何判断它何时起作用和何时不起作用?如何在主函数中使用此数组C++ 从C+返回二维数组+;,c++,arrays,pointers,stdarray,C++,Arrays,Pointers,Stdarray,在一个函数中,我创建了一个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;y cout不一定是最好的解决方案,但却是让它与向量一起工作的最简单的方法。其优点是不需要删除内存(自动发生),并且在大多数编译器的调试模式下都会检查数组的边界
#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
差不多。我相信您已经