STL-power算法实现

来源:互联网 发布:2017淘宝客服工作计划 编辑:程序博客网 时间:2024/06/15 21:31

晚上重新看《STL源码剖析》,看到power的实现时觉得很有意思,遂想记录一下。

一般情况下,在计算power时都会有个初值,通常为1,但泛型算法的值并不一定是POD类型,最常见的是class和struct类型,在处理这一类型时初值则不能为1。

STL中有个很巧妙的处理技巧,规避了这类问题。下面来看代码:


<span style="font-family:KaiTi_GB2312;font-size:18px;">template <class T, class Integer, class MonoidOperation>T power(T x, Integer n, MonoidOperation op) {if(n == 0)return identity_element(op);//可忽略此处else {//精华在此:先处理n的二进制后几位为0的情况,//以解决T是一个不嗯呢该直接赋值为1的类型while( (n&1) == 0) {n >>= 1;x = op(x, x);}T result = x;n >> = 1;while(n != 0) {x = op(x, x);if( (n&1) != 0)result = op(result, x);n >> = 1;}return result;} }</span>


0 0