【发布时间】:2014-06-21 04:32:05
【问题描述】:
我在 C++ 中有这段代码:
void printHeap (Heap<T> &heap)
{
typename list< HeapNode<T> >::iterator heapIterator = heap.heap.begin();
for( ; heapIterator != heap.heap.end(); ++heapIterator)
{
cout<<"element"<<endl;
}
}
这是堆的定义:
template <class T>
class Heap
{
public:
list <HeapNode<T> > heap;
HeapNode<T> *minValue;
BinomialHeap(HeapNode<T> *min = 0)
{
minValue = min;
}
T getMinimumKey()
{
return minValue->key;
}
void insert(T data)
{
HeapNode<T> tmp (data);
heap.push_back(tmp);
if(!minValue || minValue->key > tmp.key)
minValue = &tmp;
}
};
堆节点.cpp 模板
class HeapNode
{
public:
int degree;
HeapNode<T> *parent;
list <HeapNode<T> *> sons;
T key;
HeapNode(T d, HeapNode<T> *parent = 0)
{
key = d;
this->parent = parent;
degree = 0;
}
};
我已经尝试过这段代码,但我得到了一些意想不到的值:
BinomialHeap<int> heap;
heap.insert(4);
heap.insert(3);
heap.insert(2);
heap.insert(1);
cout<<heap.getMinimumKey() <<endl;
printHeap(heap);
cout<<heap.getMinimumKey();
第一个 cout 打印 1(如预期的那样),但在调用 printHeap 之后,即使我没有操作此成员变量,minValue 也会发生变化(第二个 cout 打印一个奇怪的数字)。为什么会这样?它不应该打印相同的数字,因为我没有在那个方法中修改 minValue 吗?
【问题讨论】:
标签: c++ oop data-structures