2
queue < int* > qq;

for (int i = 0; i < N; i++) {
    int cc[2] = {i, i + 1};
    qq.push(cc);
}

Nは大きいですが、正確ではないので、キューを使用します。多くの配列をキューに格納したいのですが、qqが格納した配列は同じものです。どうすればいいですか?

4

3 に答える 3

6

あなたのコードは機能しません。それぞれccがループ内で同じスタック位置を持ちます。

ccおそらく使用して、ヒープに配列を割り当てる必要がありint *cc = new int[2];ます(ただし、後で必要にdeleteなります)。

より良い方法は、 or orccとして宣言することです (C++11 の場合)。std::vectorstd::arraystd::tuple

于 2012-12-03T09:17:03.540 に答える
2

あなたがしていることは構文的には正しいですが、概念的には間違っています。各反復で作成され、反復の最後に破棄されるローカル配列を挿入しています。qq使えない状態のままです。ループの外側で、 の要素を逆参照すると、qq未定義の動作が発生します。

使用std::vector:

std::queue<std::vector<int>> qq;

for (int i = 0; i < N; i++) {
    std::vector<int> cc{i, i + 1};
    qq.push(cc);
}
于 2012-12-03T09:16:20.743 に答える
0

毎回同じアドレス、つまり をプッシュしますcc。次のように、2 つの値を保持する構造体を定義する必要があります。

struct CC {
    int x, y;
    CC(int _x, int _y) : x(_x), y(_y) {}
}

queue<CC> qq;

その後..

qq.push(CC(i, i + 1));
于 2012-12-03T09:18:54.167 に答える