C++ vector计算数组之和

在C++ vector是一个动态数组,支持按下标索引访问、顺序访问、动态扩容等。计算vector里的元素之和,既可以通过for循环遍历每一个元素,然后相加得到数组之和;也可以通过调用accumulate()库函数,输入vector的起点、终点、参考原点(默认是0或者0.000),来得到数组之和;还可以通过for_each+lamba表达式,来计算元素之和。

比如,有一个数组std::vector arry = { 1,2,3,4,5,6,7,8,9 }, 计算这个arry数组之和。

1 for循环计算数组之和

在for循环中,定义一个局部变量total1,保存每次的累加和。

cpp 复制代码
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> arry = { 1,2,3,4,5,6,7,8,9 };

    //方法一,for循环计算数组之和
    int total1 = 0;
    for(auto item: arry)
    {
        total1 += item;        
    }
    std::cout << "#1 total1= " << total1 << std::endl;
	return 0;
}

2 accumulate计算数组之和

accumulate()库函数,其头文件是#include <numeric>, 它既可以计算整数之和,也可以计算浮点数之和,还可以打印字符串。它有4个模版函数,如下

cpp 复制代码
#include <numeric>

// 1)计算数组之和, 数值型
template< class InputIt, class T >
T accumulate( InputIt first, InputIt last, T init );

// 2)计算数组之和,字符型
template< class InputIt, class T >
constexpr T accumulate( InputIt first, InputIt last, T init );

// 3) 按BinaryOperation方式, 操作数值数组元素
template< class InputIt, class T, class BinaryOperation >
T accumulate( InputIt first, InputIt last, T init,
              BinaryOperation op );
    
// 4) 按BinaryOperation方式, 操作字符数组元素     
template< class InputIt, class T, class BinaryOperation >
constexpr T accumulate( InputIt first, InputIt last, T init,
                        BinaryOperation op );

由于是计算数值型数组之和,这里选择第一个模版函数,它的第三个参数表示值的类型和参考值,对于int,默认是0,对于double,默认是0.000。

cpp 复制代码
template< class InputIt, class T >
T accumulate( InputIt first, InputIt last, T init );

完整代码如下:

cpp 复制代码
#include <iostream>
#include <vector>
#include <numeric>

int main()
{
    std::vector<int> arry = { 1,2,3,4,5,6,7,8,9 };

    //方法二,accumulate计算数组之和
    int total2 = accumulate(arry.begin(), arry.end(), 0);
    std::cout << "#2 total2= " << total2 << std::endl;

    return 0;
}

3 for_each计算数组之和

for_each计算数组之和,使用了lamba表达式,局部变量total3按引用传递给lamba,保存累加之后的值,它的模版函数 如下:

cpp 复制代码
#include <algorithm>

template< class InputIt, class UnaryFunction >
UnaryFunction for_each( InputIt first, InputIt last, UnaryFunction f );

完整代码如下:

cpp 复制代码
#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
    std::vector<int> arry = { 1,2,3,4,5,6,7,8,9 };

    //方法三,for_each计算数组之和
    int total3 = 0;
    std::for_each(std::begin(arry), std::end(arry), [&total3](auto arry) {total3 += arry; });
    std::cout << "#3 total3= " << total3  << std::endl;

    return 0;
}

参考文献

【1】std::accumulate cppreference.com

【2】std::for_each cppreference.com

相关推荐
BirdenT2 小时前
20260519紫题训练
c++·算法
Highcharts.js6 小时前
倒置百分比堆叠面积图表示列详解|Highcharts大气成分图表代码
开发语言·信息可视化·highcharts·图表开发·面积图·图表示例·推叠图
csdn_aspnet7 小时前
C语言 Lomuto分区算法(Lomuto Partition Algorithm)
c语言·开发语言·算法
晨曦中的暮雨7 小时前
4.15腾讯 CSIG云服务产线 一面
java·开发语言
存在morning7 小时前
【GO语言开发实践】二 GO 并发快速上手
大数据·开发语言·golang
谙弆悕博士7 小时前
【附C源码】从零实现C语言堆数据结构:原理、实现与应用
c语言·数据结构·算法··数据结构与算法
xiaoerbuyu12338 小时前
开源Java 邮箱 基于SpringBoot+Vue前后端分离的电子邮件
java·开发语言
C+++Python9 小时前
C++ 进阶学习完整指南
java·c++·学习
sparEE9 小时前
c++值类别、右值引用和移动语义
开发语言·c++
zhangjw349 小时前
第11篇:Java Map集合详解,HashMap底层原理、哈希冲突、JDK1.8优化、遍历方式彻底吃透
java·开发语言·哈希算法