0001 template <typename T> struct Hailstone { //函数对象:按照Hailstone规则转化一个T类对象 0002 virtual void operator() ( T& e ) { //假设T可直接做算术运算 0003 int step = 0; //转换所需步数 0004 while ( 1 != e ) { //按奇、偶逐步转换,直至为1 0005 ( e % 2 ) ? e = 3 * e + 1 : e /= 2; 0006 step++; 0007 } 0008 e = step; //返回转换所经步数 0009 } 0010 };