参考书籍: 《STL源码剖析》
源代码: cygnus C 2.91.57 for Windows
I .所在文件的位置//numeric # ifndef _ _ SGI _ STL _ numeric # define _ _ SGI _ STL _ numeric/. # includes TL _ nu numeric ifndef _ SGI _ STL _ internal _ numeric _ h # define _ SGI _ STL _ internal _ numeric _ h _ SGI _ STL _ internal _ internal
II .算法测试/*测试代码*/# include vector # include numeric//accumulate # include functional//minususingnamespacestd; int main () intia(5)={ 1,2,3,4,5 }; Vectorintiv(ia,ia 5 ); coutaccumulate(iv.begin )、iv.end )、0 ) endl; //result336001245//在此版本的accumulate中,可以从初始值中依次减去各要素coutaccumulate(iv.begin )、iv.end )、0、minusinnate 结果:0-1-2-3-4-5} iii .算法的源代码accumulate算法的两个版本的源代码如下:
需要指定/* accumulate版本1*//*init值的原因是: [first,last为空,但明确定义的值*/template class InputIterator,classtaccumumutor=最后; first将各要素值累计到初始值init的init=init *first; 返回单元; } /* accumulate版本*/template class InputIterator,class T,classbinaryoperationtaccumulate (inputiteratorfirst,input ITER )=最后; first对各要素进行二元操作init=binary_op(init,*first ); 返回单元; }测试代码中使用的minus源代码如下。
//STL _ function.htemplateclassarg 1、class Arg2、classresultstructbinary _ function { typedef arg1first _ argument _ tte typedef Result result_type; (; /* minus是两个操作的减法操作*/templateclasststructminus : public binary _ function t,t,t{toperator}(constttx,const y ) ; IV .算法功能accumulate算法主要是将[first,last的范围内的每个迭代器I所对应的要素值*i累计到初始值init中。 此函数有以下两个操作版本:
一个版本是init=init *i; 版本2是运行init=binary_op(init,*i )。