由于编程解华容道类游戏,需要将大量广度搜索的局面保存在队列中。每次从队首取出一个局面,生成后续局面再放入队尾。程序大致是这样:
struct Data{
list<short> map;
list<short> pos;
Move move;
Hashcode hashcode;
short depth;
} data;
list<Data> queue;
while (!queue.empty()) {
data = queue.front();
queue.popfront();
// 生成后续局面
// ……
queue.pushback(data);
}
现在的问题是,每次pop都会释放Data,而push时又得构造新的Data,似乎太浪费了。有什么办法能重复利用这些pop掉的资源,以减少消耗时间。
struct Data{
list<short> map;
list<short> pos;
Move move;
Hashcode hashcode;
short depth;
} data;
list<Data> queue;
while (!queue.empty()) {
data = queue.front();
queue.popfront();
// 生成后续局面
// ……
queue.pushback(data);
}
现在的问题是,每次pop都会释放Data,而push时又得构造新的Data,似乎太浪费了。有什么办法能重复利用这些pop掉的资源,以减少消耗时间。