我试图编写一个将初始化列表作为参数的泛型函数,添加元素,然后返回该数字。如果列表为空,那么它应该返回0.代码对我来说是正确的,但每当我运行它时,它从{1,2,3,4} I输入返回4,199,041而不是10。我改变了函数来打印元素而不是添加元素,并且工作正常,输出1234,所以我不知道问题是什么。非常感谢任何帮助。
#include <iostream>
#include <initializer_list>
template <typename T>
//add elements of initializer list
T total(initializer_list<T> & elements)
{
T tmp;
if(elements.size() != 0)
{
for(auto itr = elements.begin(); itr != elements.end(); ++itr)
{
tmp += *itr;
return tmp;
}
}else
return 0;
}
int main()
{
initializer_list<int> num({1, 2, 3, 4});
cout << total(num);
return 0;
}
答案 0 :(得分:3)
您可以考虑使用std :: accumulate:
#include <algorithm>
#include <iostream>
#include <initializer_list>
template <typename T>
//add elements of initializer list
T total(std::initializer_list<T> & elements)
{
// Note: Using 0 will decay the result to an integer, hence the T{} for zero.
return std::accumulate(elements.begin(), elements.end(), T{});
// Fixing the original code (where tmp is uninitialized
// and the return tmp; is misplaced):
// T tmp = 0;
// for(auto itr = elements.begin(); itr != elements.end(); ++itr)
// tmp += *itr;
// return tmp;
}
int main()
{
std::initializer_list<int> num({1, 2, 3, 4});
std::cout << total(num) << '\n';
}