如何总结C ++向量的元素? [英] How to sum up elements of a C++ vector?

查看:83
本文介绍了如何总结C ++向量的元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

std :: vector 中查找所有元素之和的方法是什么?

What are the good ways of finding the sum of all the elements in a std::vector?

假设我有一个向量 std :: vector< int>向量其中包含一些元素。现在,我想找到所有元素的总和。

Suppose I have a vector std::vector<int> vector with a few elements in it. Now I want to find the sum of all the elements. What are the different ways for the same?

推荐答案

实际上有很多方法。

int sum_of_elems = 0;



C ++ 03



C++03


  1. 经典for循环:

  1. Classic for loop:

for(std::vector<int>::iterator it = vector.begin(); it != vector.end(); ++it)
    sum_of_elems += *it;


  • 使用标准算法:

  • Using a standard algorithm:

    #include <numeric>
    
    sum_of_elems = std::accumulate(vector.begin(), vector.end(), 0);
    

    重要提示:最后一个参数的类型不仅用于初始值,但对于结果类型也是如此。如果在其中放置一个int,即使向量具有浮点数,它也会累积int。如果要对浮点数求和,请将 0 更改为 0.0 0.0f (感谢nneonneo)。另请参见下面的C ++ 11解决方案。

    Important Note: The last argument's type is used not just for the initial value, but for the type of the result as well. If you put an int there, it will accumulate ints even if the vector has float. If you are summing floating-point numbers, change 0 to 0.0 or 0.0f (thanks to nneonneo). See also the C++11 solution below.



    C ++ 11及更高版本



    C++11 and higher


    1. b。即使在将来发生更改的情况下,也会自动跟踪矢量类型:

    1. b. Automatically keeping track of the vector type even in case of future changes:

    #include <numeric>
    
    sum_of_elems = std::accumulate(vector.begin(), vector.end(),
                                   decltype(vector)::value_type(0));
    


  • 使用 std :: for_each

    std::for_each(vector.begin(), vector.end(), [&] (int n) {
        sum_of_elems += n;
    });
    


  • 使用基于范围的for循环(感谢Roger Pate):

  • Using a range-based for loop (thanks to Roger Pate):

    for (auto& n : vector)
        sum_of_elems += n;
    


  • 这篇关于如何总结C ++向量的元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆