我有一个函数,在这里我想返回多个数组。我知道在c++中不返回数组,而是返回指向数组的指针。例如:
int* function(double array[])
但是,如果我需要返回多个数组(指向数组的多个指针),怎么办?就像2-10)。我想出了一种办法。一种方法是通过引用将数组传递给一个void函数:
void function(int a[], int b[], double c[])
但是,我们可能会传递很多数组作为输入。我可以将所有输入数组打包到一个类中,通过引用传递类,但这似乎是不必要的结构。怎样才是正确的方法?谢谢
发布于 2014-09-12 00:48:13
您可以使用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] = ...
),因为函数使用的向量与调用方传入的向量相同。通过这种方式,函数可以通过改变调用方传递的向量来“返回”多个向量。
发布于 2014-09-12 00:45:34
您可以使用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
//----------------------------------------
注意:向量变得越来越慢,你对它们的减少越多。所以,如果你有一个三维矢量向量,要注意速度命中。
发布于 2014-09-12 04:50:31
尝试使用以下方法:
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];
....
}
这将通过引用传递数组的指针。
https://stackoverflow.com/questions/25799005
复制相似问题