添加初始化列表的元素

时间:2016-03-09 00:23:51

标签: c++ initializer-list

我试图编写一个将初始化列表作为参数的泛型函数,添加元素,然后返回该数字。如果列表为空,那么它应该返回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;
}

1 个答案:

答案 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';
}