我正在实现一个堆,但无法理解为什么变量“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
语句内部。