我正在尝试创建一个具有数组作为参数的模板函数.该函数重新计算数组中数字的总和.
这是我的代码:
template <class var>
var sum_numbers(var array[]) {
var sum = 0;
for (int f1=0; array[f1]!='\0'; f1++) {
sum = sum + array[f1];
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
该函数始终返回
-2001120059
Run Code Online (Sandbox Code Playgroud)
您能否想一想如何改进我的代码,请您给我一些参考,在哪里可以找到有关模板的更多信息?
非常感谢你.
更新:我的输入和函数调用:
int a[] = {1,2,3,4,5};
cout << sum_numbers(a) << endl;
Run Code Online (Sandbox Code Playgroud)
Ben*_*ley 11
您的代码似乎期望数组终止为零.没有这样的事情得到保证.这只发生在字符串文字中.你的函数实际上并没有采用数组,它需要一个指针.您不能按值获取数组,但如果您想通过引用获取数组,则可以执行以下操作:
template <class var, size_t N>
var sum_numbers(var (&array)[N]) {
var sum = 0;
for (size_t f1=0; f1<N; f1++) {
sum = sum + array[f1];
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
或者,更简洁:
template<typename T, size_t N>
T sum_numbers(T (&arr)[N]) {
return std::accumulate(arr, arr + N, T());
}
Run Code Online (Sandbox Code Playgroud)
或者,如果你想完全通用,并且对C++ 11有很好的支持:
template<typename C>
auto sum_numbers(C const & c)
-> typename std::remove_reference<decltype(*std::begin(c))>::type
{
typedef typename std::remove_reference<decltype(*std::begin(c))>::type value_type;
return std::accumulate(std::begin(c), std::end(c), value_type());
}
Run Code Online (Sandbox Code Playgroud)
你能给我一些参考,在哪里可以找到有关模板的更多信息吗?
请参阅[ 此列表 ]中的中级和高级书籍.即使是初学者书也应该至少给你介绍它们.