如何将不同大小的数组传递给我的c ++函数?

umz*_*umz 3 c++ arrays input function

我不确定这是否可行但我对这些想法持开放态度.

我有一个c ++函数.它对由用户定义为输入的数组进行一些计算,并生成两个输出值.我们称之为"myfunction",它看起来像这样:

void myfunction(double array1 [18],double array [9],double array [2],double*output1,double*output2)

我想使这个函数更通用,以便它能够采用不同大小的数组.意思是,我希望此函数的用户能够定义其他大小的数组输入.

例如,

void myfunction(double array1 [81],double array [27],double array [3],double*output1,double*output2)

在数学上,"myfunction"能够计算出精确的输出,尽管数组大小.我不想复制"myfunction",因为用户可以将总共5种不同的数组大小定义为输入.

有任何想法吗?先感谢您

Fur*_*ish 8

您可以传递std::vector或使用template:

template <std::size_t N1, std::size_t N2, std::size_t N3> // and so on...
void work_with_arrays(double (&arr1)[N1], double (&arr2)[N2], double (&arr3)[N3]){
    std::cout << "First arr of a size: " << N1 << "\n";
    std::cout << "Second arr of a size: " << N2 << "\n";
    std::cout << "Third arr of a size: " << N3 << "\n";
};

int main() {
    double something[32];
    double fewer[13];
    double maybe_byte[8];

    work_with_arrays(something, fewer, maybe_byte);
}
Run Code Online (Sandbox Code Playgroud)

代码输出:

First arr of a size: 32
Second arr of a size: 13
Third arr of a size: 8
Run Code Online (Sandbox Code Playgroud)

说明:

每个人都应该知道这种类型的参数T[](T为任何类型)衰减T*.如果我们处理一个指向数组的指针,我们就没有关于它的长度的信息,这是非常不幸的,因为固定长度数组的长度在编译时是已知的,并且在我们使用它们的任何地方都可以看到.

人们还应该知道,一个函数模板没有的功能.它是用于创建函数的模板.对于N#上面示例中使用的每个不同的集合,将为我们的使用生成一个函数.

腐烂问题的解决方法是什么?

而是将原料的T[],应传递一个参考T[].这样,类型不会衰减,并且数组的大小将是已知的.

句法?

人们可能会注意到,T (&name)[some_size]至少看起来很奇怪.括号是必需的,因为普通的T &name[size]将被解释为T& name[size],这是一个引用的阵列,而不是到一个数组参考.

结论:

能够检测传递参数数组的大小,我们不希望用一两种情况限制自己 - 我们想要全部覆盖它们,因此我们使用a template来生成具有N#所需值的函数.