Open kkndme-wx opened 1 year ago
这里没有错,n已经是size() - 1了
void HeapTimer::del_(sizet index) { /* 删除指定位置的结点 / assert(!heap.empty() && index >= 0 && index < heap.size()); /_ 将要删除的结点换到队尾,然后调整堆 */ size_t i = index; sizet n = heap.size() - 1; assert(i <= n); if(i < n) { SwapNode(i, n); if(!siftdown(i, n)) { siftup(i); } } 这里的siftdown(i,n)是否应该是siftdown(i,n-1)?
没有问题,因为n=size()-1,并且siftdown中while循环的条件为j<n
void HeapTimer::del_(sizet index) { / 删除指定位置的结点 / assert(!heap.empty() && index >= 0 && index < heap_.size()); / 将要删除的结点换到队尾,然后调整堆 / size_t i = index; sizet n = heap.size() - 1; assert(i <= n); if(i < n) { SwapNode(i, n); if(!siftdown(i, n)) { siftup(i); } } 这里的siftdown(i,n)是否应该是siftdown(i,n-1)?