C++ vector计算数组之和

这篇具有很好参考价值的文章主要介绍了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,保存每次的累加和。

#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个模版函数,如下

#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。

template< class InputIt, class T >
T accumulate( InputIt first, InputIt last, T init );

    完整代码如下:

#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,保存累加之后的值,它的模版函数 如下:

#include <algorithm>

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

    完整代码如下:

#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文章来源地址https://www.toymoban.com/news/detail-815413.html

到了这里,关于C++ vector计算数组之和的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c++ 11标准模板(STL) std::vector (二)

    template     class T,     class Allocator = std::allocatorT class vector; (1) namespace pmr {     template class T     using vector = std::vectorT, std::pmr::polymorphic_allocatorT; } (2) (C++17 起) 1) std::vector 是封装动态数组的顺序容器。 2) std::pmr::vector 是使用多态分配器的模板别名。 元素相继存储,这意味着不

    2024年02月02日
    浏览(56)
  • C++面试八股文:std::vector了解吗?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第23面: 面试官: vector 了解吗? 二师兄:嗯,用过。 面试官:那你知道 vector 底层是如何实现的吗? 二师兄: vector 底层使用动态数组来存储元素对象,同时使用 size 和 capacity 记录当前元素的数量和当前动态数组的容量。如果

    2024年02月10日
    浏览(39)
  • OpenCV - cv::Mat与unsigned char*数组或者float*数组相互转换,cv::Mat与std::vector的相互转换

    通常情况下,在同一个opencv项目传递cv::Mat可直接通过const cv::Mat img这种方式传递,但是如果需要进行跨语言传递,比如C++传递到C#或者C#传递到C++,那么通常这种情况下需要将cv::Mat转换为内存指针比如unsigned char指针或者float指针进行传递。 1.1 cv::Mat转换为unsigned char 数组、un

    2024年02月13日
    浏览(54)
  • JS 数组求和计算

    项目中,有一个数组,纯数字,需要计算求和。不想使用循序遍历。 array.join(separator):是把数组中的所有元素转换为一个字符串。separator 可选。指定要使用的分隔符,如果省略该参数,则使用逗号作为分隔符。 separator也可以改为减、乘、除或其他计算 eval(string):是JavaScri

    2024年02月11日
    浏览(35)
  • C++——数组、多维数组、简单排序、模板类vector

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,正逐渐往全干发展 📃 个人状态: 研发工程师,现效力于中国工业软件事业 🚀 人生格言: 积跬步至千里,积小流成江海 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js🍒

    2024年01月22日
    浏览(45)
  • C++随机数生成:std标准库和Qt自带方法

    std::rand() 是C++中的一个随机数函数,它生成一个范围在0到 RAND_MAX 之间的伪随机整数。 在每次程序运行时,通常需要使用不同的种子值来初始化随机数生成器。可以使用 std::srand() 函数来设置种子值。 设置种子的目的是为了引入随机性,使得每次程序运行时生成不同的随机数

    2024年01月16日
    浏览(58)
  • 【C++】学习C++STL中的数组——vector

            好久不见大家!今天的这篇博客是关于我对于STL(C++标准模板库)中的容器vector的学习和理解,希望大家能够喜欢。          vector是STL中的一种序列容器,对应着数据结构中的顺序表,也可以说是数组。在我们正式学习了解vector之前,我们先看看C++官网对其的文档介

    2024年02月10日
    浏览(38)
  • QT+ Libtorch Microsoft C++ 异常: std::length_error

            visual studio编译qt+libtorch,载入模型时报错。 出错信息:         使用visual studio 编译QT+libtorch报错 未加载kernelbase.pdb,kernelbase.pdb 包含查找模块 KernelBase.dll 的源文件所需的调试信息。 0x00处(位于 view64.exe 中)有未经处理的异常: Microsoft C++ 异常: std::length_error,位

    2024年02月12日
    浏览(36)
  • C++中vector和数组之间的转换及其效率问题

    因为一些原因,本人遇到需要频繁把vector与数组之间转换的情况,于是就分析了一下两个之间转换的实施以及相关的效率问题。 众所周知,一维vector中的元素存储是顺序连续的,所以我们可以通过访问第一个元素的地址以及元素的数量来访问一系列的元素。因此,我们可以采

    2023年04月09日
    浏览(40)
  • 探索C++中的动态数组:实现自己的Vector容器

    🎉个人名片 : 🐼作者简介:一名乐于分享在学习道路上收获的大二在校生 🙈个人主页🎉:GOTXX 🐼个人WeChat:ILXOXVJE 🐼本文由GOTXX原创,首发CSDN🎉🎉🎉 🐵系列专栏:零基础学习C语言----- 数据结构的学习之路----C++的学习之路 🐓每日一句:如果没有特别幸运,那就请特

    2024年03月16日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包