二维数组
char【7】【5】
char
合法形参: a【】【5】
char(*c)【5】;
c= new char【n】【5】;
char **x
STL
accumulate用于计算init和[first , last)内部所有元素的总和。需要提供一个init,表示当[first,last)为空的区间仍然可以获取一个明确定义的数值,如果想获得[first,last)内所有数值的总和,应将init设为0
二元操作符不必满足交换律和结合律,是的accumulate的行为顺序有着明确的定义:先将init初始化,然后针对[first,last)区间内的每一个迭代器i,依次执行init = init + *i
(第一版本) 或者 init = binary_op(init, *i)
(第二版本)
//版本1 template <class InputIterator,class T> T accumulate(InputIterator first,InputIterator last,T init){ for(;first != last; ++first){ init += *first; //将每个元素数值累加到init身上 } return init; } //版本2 template <class InputIterator,class T,class BinaryOperation> T accumulate(InputIterator first,InputIterator last,T init, BinaryOperation binary_op){ for(;first!=last;++first){ init = binary_op(init, *first);//对每一个元素执行二元操作 } return init; }
#include <iostream> //std::cout #include <functional> //std::minuc #include <numeric> //std::accumulate int my_function(int x,int y){return x + 2*y;} struct my_class{ int operator()(int x,int y){ return x + 3*y; } }my_object; int main(){ int init = 100; int numbers[] = {10,20,30}; // std::cout << << std::endl; std::cout << "using default accumulate" << std::endl; std::cout << std::accumulate(numbers,numbers+3,init) << std::endl; std::cout << "using functional's accumulate" << std::endl; std::cout << std::accumulate(numbers,numbers+3,init,std::minus<int>()) << std::endl; std::cout << "using custom function" << std::endl; std::cout << std::accumulate(numbers,numbers+3,init, my_function) << std::endl; std::cout << "using custom object" << std::endl; std::cout << std::accumulate(numbers,numbers+3,init, my_object) << std::endl; }