在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

#include

int main()

{

std::vector 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 , 它既可以计算整数之和,也可以计算浮点数之和,还可以打印字符串。它有4个模版函数,如下

#include

// 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

#include

#include

int main()

{

std::vector 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

template< class InputIt, class UnaryFunction >

UnaryFunction for_each( InputIt first, InputIt last, UnaryFunction f );

    完整代码如下:

#include

#include

#include

int main()

{

std::vector 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

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: