カスタム構造/クラスのC ++キューとポインタキューの問題

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つの列に分割し、次の図に切り取ります)
ここに画像の説明を挿入します

キュー内のすべての値がキューに入った最後の値になっていることがわかります

ヘルプ:これはなぜですか?

おすすめ

転載: blog.csdn.net/weixin_44559752/article/details/109398519