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 = e%2 ? 3*e+1 : e/2; 0006 step++; 0007 } 0008 e = step; //返回转换所经步数 0009 } 0010 };