意味

2012-02-07 24 views
-3

は、私が持っている、私は今意味

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

+7

あなたはここ1年間で118の質問をしてきましたが、疑問のコードサンプルの書式設定方法はまだ分かりませんでしたか? – sth

+1

独自の書式設定について不平を言う 'std :: priority_queue'を初めて見ることができます。 :) – slaphappy

+0

@sth:怠惰のように聞こえる。私はこのうちにとどまるつもりです。 (笑:http://stackoverflow.com/questions/9181321/simple-c-implementation-throwing-error) –

答えて

1
node temp = sth.top();// does it perform copy 

はい、これにより、先頭の要素のコピーが作成され、tempに格納されます。 temp.leftは、トップノードの左ポインタと同じ場所を指します。 top()は実際には参照を返しますが、この行はコピーを要求します。 node &temp = sth.top();は、先頭の要素への参照を宣言します。

sth.pop(); 

キューから最上位ノードを削除します。 ここでデータ構造が壊れている可能性があります。そのノードオブジェクトへのポインタ(たとえば、キュ​​ー内の他のノードの左ポインタ)は無効です。

temp.left = sth.top(); // is this allowed? 

いいえ、これはコンパイルされません。 temp.leftはポインタで、top()はオブジェクトへの参照を返します。 temp.left = &sth.top();