char【7】【5】 char 合法形参: a【】【5】
char(*c)【5】; c= new char【n】【5】;
char **x
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;
}