原书中4.7.2节 heap算法
__adjust_heap()函数中调用了__push_heap函数,原作者注释:依侯捷之见,下面直接改为*(first + holeIndex) = value;应该是可以的。
这里是不可以的。如果__adjust_heap()单纯被__pop_heap()函数调用,这没什么问题,但在__make_heap()函数中也调用了__adjust_heap()函数, 最后一个参数传的是parent结点的值,按照作者的假定,这无法得出正确的堆。举个例子,vector有两个元素【10,9】,如下图所示:
如果按照作者的设想,调用make_heap后,在vector中变成【9,10】。如果按照原代码,调用调用make_heap后生成堆在vector中是【10,9】,是正确的。
不知道作者有没有在新版中修正过。