在一个函数中,我创建了一个二维数组,它从文本文件中填充并需要返回到main。数组在整个程序中保持不变的大小。
我知道这是一个被问到很多的东西,但我似乎总是得到两个答案之一:
使用std :: vector或std :: array或其他一些STD函数。我真的不明白这些是如何工作的,是否有任何网站实际解释它们以及它们与普通数组相比如何行动?是否有我需要的特殊#include? p>
或者
使用指向数组的指针,并返回指针。首先,在一些答案上,由于本地数组,它显然不起作用。我怎么知道它什么时候起作用?如何在主函数中使用此数组?
我对指针和std ::的概念比实际代码更麻烦,所以如果有一个你知道的网站解释得特别好,请随意放一下。
答案 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";
}
}
}
答案 1 :(得分:0)
听起来你是C ++的新手。如果确实如此,我建议现在使用数组,因为你可能不会使用STL容器给你的任何东西。现在,我们来谈谈指针。
如果在函数中声明了一个本地数组,那么主函数将无权访问它。但是,如果您使用new
关键字动态分配数组,则情况并非如此。使用new
分配数组时,实质上是告诉编译器为程序保留一块内存。然后,您可以使用指针访问它,这实际上只是您保留的那块内存的地址。因此,您需要做的就是将指针(地址)传递给该数组,而不是将整个数组传递给main函数。
以下是一些相关的解释。当我发现更多时,我会添加它们:
答案 2 :(得分:0)
创建二维数组的最简单方法如下:
char (*array)[10];
array = new array[5][10];
二维数组可能很难申报。变量声明中的括号是很重要的,告诉编译器array
是一个指向10个字符数组的指针。
除非使用C
集合,否则了解C++
和std::
的指针非常重要。即便如此,指针也很普遍,不正确的使用对程序来说可能是毁灭性的。