假设我有
struct node{
int val;
node* left;
};
现在,我有priority_queue<node> sth;
以下是做什么的:
node temp = sth.top();// does it perform copy
sth.pop();
temp.left = sth.top(); // is this allowed?
如何从队列中弹出元素并将其存储在temp.left
?
答案 0 :(得分:1)
node temp = sth.top();// does it perform copy
是的,这会复制top元素并将其存储在temp
中。 temp.left
指向与顶部节点左指针相同的位置。请注意top()
实际上会返回一个引用,但此行要求提供副本。 node &temp = sth.top();
将声明对顶部元素的引用。
sth.pop();
从队列中删除顶部节点。 您可能刚刚破坏了数据结构。任何指向该节点对象的指针(例如,队列中其他节点的左指针)现在都无效。
temp.left = sth.top(); // is this allowed?
不,这不会编译。 temp.left
是一个指针,top()
返回对象的引用。至少,您需要获取该对象的地址:temp.left = &sth.top();