在C++中从函数返回多个数组

3

我有一个函数,想要返回多个数组。我知道在C++中不能直接返回数组,而是返回指向数组的指针。例如:

int* function(double array[])

但是如果我需要返回多个数组(多个指向数组的指针?比如2-10个),该怎么办呢?我想到了一种方法。一种方法是通过引用将这些数组传递给一个void函数:

void function(int a[], int b[], double c[])

但是我们可能会传递很多数组作为输入。我可以将所有的输入数组打包到一个类中,通过引用传递这个类,但这似乎是不必要的结构。那么应该怎样做呢?谢谢。


1
@nneonneo,我是相当新的C++学习者,并不知道数组并不被推崇。 - James
@user657267 嗯,我正在尝试将一些Matlab代码翻译成C++。这段代码涉及许多需要输入多个数组并返回多个数组的函数。基本上,我正在努力找出如何最好地设计C++版本(显然,Matlab与C++有很大不同)。 - James
1
“这个问题应该怎么解决?”其实并没有唯一正确的方法,编程之美就在于此!一切都取决于具体应用场景。顺便提一下,你写的解决方案有些危险,因为‘function’并不知道你为数组分配了多少内存空间。” - chuck1
1
如果你想要像你的代码所示那样“返回”三个数组,其中两个是int类型,一个是double类型,我不认为有一种类型安全的方式可以做到这一点,除非引入一个具有三个正确类型成员的数据类型。也许std::tuple可以帮助你? - 5gon12eder
1
@user657267 在计算机科学术语中,“按引用传递”意味着被调用者访问与调用者相同的变量;在C++中,通过传递指针来实现这一点,因为被调用者可以解引用指针以访问相关变量。我认为OP的意思是这个,而不是C++术语“引用”。 - M.M
显示剩余7条评论
3个回答

4

您可以使用std::vector代替数组:

void function(vector<int> &a, vector<int> &b, vector<double> &c)

函数调用者只需创建三个向量并将它们传入:

vector<int> a, b;
vector<double> c;
function(a, b, c);

该函数可以任意编辑向量(例如a.resize(10); a[0] = ...),因为函数使用的向量是调用者传递进来的同一个向量。通过更改调用者传入的向量,该函数可以“返回”多个向量。


0

你可以使用一个向量的向量

 std::vector<std::vector<double>> my2Dvec;
 std::vector<double> vec1, vec2, vec3;

 my2dvec.push_back(vec1);
 my2dvec.push_back(vec2);
 my2dvec.push_back(vec3);

 my2dvec[0].push_back(123.123);
 my2dvec[1].push_back(456.456);
 my2dvec[2].push_back(789.789);

std::cout << my2dvec[0][0] << std::endl; // 123.123
std::cout << my2dvec[1][0] << std::endl; // 456.456
std::cout << my2dvec[2][0] << std::endl; // 789.789
 //----------------------------------------

注意:向量在维度增加时会变得越来越慢。因此,如果您有一个由向量组成的三维向量,请注意速度影响。


取出来了。嗯,我记得最近已经做过了。稍后我会测试一下。 - Jay

0

尝试使用以下内容:

void Function(unsigned char*&dat1, unsigned char*&dat2, unsigned char*&dat3, ...)
{
      dat1 = new unsigned char[10];
      dat2 = new unsigned char[20];
      dat3 = new unsigned char[30];
      ....
}

这将通过引用传递数组的指针。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接