从c++中的一个函数返回多个数组

returning multiple arrays from a function in c++

本文关键字:函数 一个 返回 数组 c++      更新时间:2023-10-16

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

int* function(double array[])

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

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

但是我们可能会传递很多数组作为输入。我可以将所有的输入数组打包到一个类中,通过引用传递该类,但这似乎是不必要的结构。做这件事的正确方法是什么?感谢

您可以使用std::vectors而不是数组:

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] = ...),因为函数使用的向量与调用者传入的向量相同。这样,函数可以通过更改调用者传入的矢量来"返回"多个向量。

您可以使用vector of vectors

 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
 //----------------------------------------

注意:向量变得越来越慢,你投入的疯狂越多。因此,如果你有一个三维矢量,请注意的速度

尝试使用以下方法:

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];
      ....
}

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

相关文章: