C ++キューには、要素自体ではなく要素のコピーが格納されるため、問題があります。キューを使用して検索する必要がある場合、検索中に要素自体を変更する方法(構造内のポインターの変更など)。処理する?
ポインタキューを使用してみてくださいint
。基本タイプなど(コード1)に実装できることがわかりましたが、カスタム構造とクラスは実装できません。キューに格納されている要素の値は、キューの最後の要素の値になります。すみません、これはなぜですか??(灬ꈍꈍ灬)
コード1:Intのポインターキュー
#include<iostream>
#include<queue>
using namespace std;
queue<int*> q;
int main(){
int i = 0;
q.push(&i);
i = 3;
int j = 100;
q.push(&j);
cout<<*q.front();
q.pop();
j = 90;
cout<<*q.front();
return 0;
}
出力結果:390
期待される出力。
しかし、intをクラスに置き換えた後:
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int N = 4;
class Game { //棋局类
public:
int s[N][N]; //当前棋局状况
Game * father; //父节点指针
void show() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << s[i][j];
}
cout << endl;
}
cout << endl;
}
};
int main() {
queue<Game *> q;
for (int j = 0; j < 4; j++) {
Game i;
i.s[0][j] = j;
//Game * p = (Game*)malloc(sizeof(Game));
//p = &i;
q.push(&i);
(*q.front()).show();
}
Game i;
for (int j = 0; j < 4; j++) {
i = *q.front();
q.pop();
i.show();
cout << "队列长度:" << q.size() << endl;
}
system("pause");
return 0;
}
出力結果:(結果が長すぎるため、2つの列に分割し、次の図に切り取ります)
キュー内のすべての値がキューに入った最後の値になっていることがわかります
ヘルプ:これはなぜですか?