结构运算的意义

时间:2012-02-07 17:52:47

标签: c++

假设我有

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

1 个答案:

答案 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();