2

だから私は次のようなループを持っています

for (r = 0; r < k; r++) {
    pair p = {r, D[r]};
    queue.push(p);
}

ここで、ペアは次のように定義されます

struct pair {
    int u;
    float d;
}

これは、k ペアを作成して優先キューにプッシュする合法的な方法ですか? p は毎回上書きされますが、ペアは元の形式でキューにまだ存在しますか? それとも、すでにキューにある各ペアが自動的に p の新しい値に更新され、キューが同じペアの同一のコピーでいっぱいになるのでしょうか?

ありがとう!

4

2 に答える 2

4

コードは問題ありません。

pキューにコピーされます。コピーが作成された後にオリジナルがどうなるかは問題ではありません。

于 2012-11-28T19:53:00.477 に答える
1

はい、コードはそのまま機能します。のデフォルトのコピー コンストラクタpが呼び出され、コピーが にプッシュされqueueます。ただし、コンストラクターを追加することで、コードを少し簡素化できます。次のように定義した場合pair:

struct pair {
    pair(int u_, float d_) : u(u_), d(d_){}
    int u;
    float d;
};

次に、ループで次のように簡単に実行できます。

for (r = 0; r < k; r++) {
    queue.push_back(pair(r, D[r]));
}

そうすれば、意図的にコピーをプッシュしていることがもう少し明確になります。また、;構造体宣言の最後に after があることを確認してください! 忘れると、不可解なコンパイラ エラーが発生する可能性があります。

于 2012-11-28T20:05:18.077 に答える