今天在《C++ Primer》第五版page101上看见一个问题:
在二分法搜索中为什么用的是 mid = beg + ( end - beg ) /2 而非 mid = ( beg + end ) / 2 ?
从我原先的思维,去两个数的中间值确实是两数相加除以二,所以想了好一会儿也没想明白,无奈之下只好求助google了……
1. beg+end有溢出风险,而end-beg则没有;
2.从分步逻辑来看,beg + ( end - beg ) /2 表示的是”基址 + 增量/2“,而 beg + end 没有明确的意义
3.对指针和迭代器通用性更强
目前了解到的就是以上几种原因了,原来要考虑的东西有这么多,看来学习的路途任重而道远啊……