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种不同的数组大小定义为输入.
有任何想法吗?先感谢您
您可以传递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#
所需值的函数.
归档时间: |
|
查看次数: |
1069 次 |
最近记录: |