我有下面的代码试图转储存储在 C++ 中的 priority_queue 中的值:
priority_queue<Point, vector<Point>, myCmp> pq;
int i;
for (i = 0; i < 10; i++) {
Point p(i,i);
pq.push(p);
}
const Point& p0 = pq.top();
while(!pq.empty()) {
cout<<p0.x<<p0.y<<endl;
pq.pop();
}//I'm getting output like "00 11 22 33 ... 99"
正如代码中的注释所说,每次队列弹出一个值时,我的引用变量 p0 都会不断变化。这对我来说没有意义,因为我认为 p0 应该始终是对 (0,0) 对象的引用,即开始时队列的前面。我知道我可以使用
Point p0 = pq.top()
获取前端元素的副本并避免该问题。但是,有人可以解释使用引用的问题吗?
PS 我对 C++ 队列做了同样的事情,但没有观察到这个问题。