我正在实现一个堆,但无法理解为什么变量“int hole”不在我的insert方法中。我已经尝试了很多事情,例如,在方法以及类中都进行了声明。我插入中的for循环引发了错误。

template <class Comparable>
class BinaryHeap
{
    public:
        explicit BinaryHeap( int capacity = 100 );
        bool isEmpty( ) const;
        bool isFull( ) const;
        const Comparable & findMin( ) const;
        void insert( const Comparable & x );
        void deleteMin( );
        void deleteMin( Comparable & minItem );
        void makeEmpty( );
    private:
        int currentSize; // Number of elements in heap
        vector<Comparable> array; // The heap array
        void buildHeap( );
        void percolateDown( int hole );
 };

template <class Comparable>
void BinaryHeap<Comparable>::insert( const Comparable & x )
{
    if( isFull( ) ) //throw Overflow( );
    // Percolate up
        int hole = ++currentSize;
    **for( ; hole > 1 && x < array[ hole / 2 ]; hole /= 2 )**
        array[ hole ] = array[ hole / 2 ];
        array[ hole ] = x;
}

最佳答案

注释掉throw后,if语句看起来像

if( isFull( ) )
{
    int hole = ++currentSize;
}

变量hole仅在if语句内部。

09-19 05:24