だから私は以下のコードスニペットを持っています...
for(int k=0; k<10; k++){
State newState;
newState = queue.dequeue();
//...do stuff with `newState`...
}
私が抱えている問題は、何時間ものテストの後、新しい要素をFIFO方式でポップアウトするのではなく、コードが に到達するたびにnewState
のまったく同じインスタンスをデキューすることに気付きました.私が間違っていることを正確に説明してください:/State
newState = queue.dequeue()
以下は私の Queue クラス .h と .cpp コードです...
//queue.h
#include <iostream>
#include <stdio.h>
#include "state.h"
using namespace std;
// Node class
class Node {
public:
State elem;
Node* next;
Node() {}
State Elem() { return elem; }
Node* Next() { return next; }
};
// Queue class
class Queue {
Node *head;
Node *tail;
public:
Queue();
~Queue();
bool isEmpty();
int size();
void enqueue(State);
State dequeue();
};
そして私の.cppファイル...
//queue.cpp
#include "queue.h"
#include <iostream>
Queue::Queue(){
head = NULL;
tail = NULL;
}
Queue::~Queue(){
if(!isEmpty()){
while(head){
Node *del = head;
head = head->next;
delete del;
}
}
}
bool Queue::isEmpty(){
return head == NULL;
}
int Queue::size(){
int count = 0;
if(isEmpty()){
return count;
} else {
Node *temp = head;
while(temp){
temp = temp->next;
count++;
}
delete temp;
return count;
}
}
//insert s to back of queue
void Queue::enqueue(State s){
Node* newNode = new Node();
newNode->elem = s;
newNode->next = NULL;
if(s.checkZ()){
cout << "Puzzle solved!" << endl << endl;
exit(0);
}
if(head==NULL){
head = tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
}
//remove State from front of queue
State Queue::dequeue(){
if(isEmpty()){
cout << "This puzzle has no solution." << endl;
cout << "Exiting program..." << endl << endl;
exit(0);
} else {
State ret = head->Elem();
Node *del = head;
head = head->next;
delete del;
return ret;
}
}
助けてくれてありがとう、リクエストごとに私のコードの他のスニペットを見せてくれることを嬉しく思います
編集:これがStateのコピーコンストラクターです...
State::State(const State &rhs){
pieces = rhs.pieces;
pieceCount = rhs.pieceCount;
rows = rhs.rows; cols = rhs.cols;
currentState = rhs.currentState;
prevStates = rhs.prevStates;
prevStateCount = rhs.prevStateCount;
moves = rhs.moves;
moveCount = rhs.moveCount;
}