栈的实现<array<string, 100>>
Implementation of stack <array<string, 100>>
我已经学习 C++ 几个星期了,并开始制作我的游戏,我用 std::stack 解决了这个问题。
我有一个 class 有一个板子和一个堆栈
#include <string>
#include <stack>
array<string, 100> board;
stack<array<string, 100>> history;
每次我创建我的看板或进行更改时,我都会简单地通过 history.push(board)
将它推入堆栈。
我做了一个撤销函数,看起来像这样:
array<string, 100> Board::undoMove(stack<array<string, 100>> &history){
array<string, 100> arr;
if(!history.empty()){
history.pop();
arr = history.top();
}
else{
arr = array<string, 100>();
}
return arr;
}
调用时:
array<string,100> tempState = b.undoMove(history);
if(!tempState.empty()){
board = tempState;
cout << "\nUndoing your latest move.. "<< endl;
}
else{
cout << "No previous move available" << endl;
}
显然,只有当我在第一次更改棋盘后进行撤消操作时,此功能才有效。经过几次更改后,我的程序暂停后停止。
我不太擅长调试,所以我不知道哪里出了问题。我正在制作这个游戏,所以它可以帮助我理解堆栈的工作原理,但我认为这不会有任何进展!我认为我认为堆栈在这种情况下应该如何工作有问题。
另外,有些人认为堆栈是 std::array
的堆栈这一事实在我推送时会产生问题,但这听起来不对,所以我很困惑我应该如何看待这个问题或想到它,我正在寻找我能得到的任何建议。
history.pop();
这将删除堆栈顶部的元素。如:它消失了。它不再是。它去见它的制造者。它加入了无形的合唱团。它渴望峡湾。它现在是一个前元素。之后:
arr = history.top();
此 return 是堆栈顶部的 当前 元素。这不是 return 前元素。这是古老的历史。
所以,最后:如果在这次冒险开始时堆栈只有一个元素,首先将其删除,然后尝试在完全空的堆栈顶部检索该元素。这当然不存在,整个纸牌屋都倒塌了。
你这两个操作是乱序的。 首先需要取栈top
处的元素;只有 then,在元素安全地隐藏在您自己的变量中之后,您才能到达 pop
堆栈。
我已经学习 C++ 几个星期了,并开始制作我的游戏,我用 std::stack 解决了这个问题。
我有一个 class 有一个板子和一个堆栈
#include <string>
#include <stack>
array<string, 100> board;
stack<array<string, 100>> history;
每次我创建我的看板或进行更改时,我都会简单地通过 history.push(board)
将它推入堆栈。
我做了一个撤销函数,看起来像这样:
array<string, 100> Board::undoMove(stack<array<string, 100>> &history){
array<string, 100> arr;
if(!history.empty()){
history.pop();
arr = history.top();
}
else{
arr = array<string, 100>();
}
return arr;
}
调用时:
array<string,100> tempState = b.undoMove(history);
if(!tempState.empty()){
board = tempState;
cout << "\nUndoing your latest move.. "<< endl;
}
else{
cout << "No previous move available" << endl;
}
显然,只有当我在第一次更改棋盘后进行撤消操作时,此功能才有效。经过几次更改后,我的程序暂停后停止。
我不太擅长调试,所以我不知道哪里出了问题。我正在制作这个游戏,所以它可以帮助我理解堆栈的工作原理,但我认为这不会有任何进展!我认为我认为堆栈在这种情况下应该如何工作有问题。
另外,有些人认为堆栈是 std::array
的堆栈这一事实在我推送时会产生问题,但这听起来不对,所以我很困惑我应该如何看待这个问题或想到它,我正在寻找我能得到的任何建议。
history.pop();
这将删除堆栈顶部的元素。如:它消失了。它不再是。它去见它的制造者。它加入了无形的合唱团。它渴望峡湾。它现在是一个前元素。之后:
arr = history.top();
此 return 是堆栈顶部的 当前 元素。这不是 return 前元素。这是古老的历史。
所以,最后:如果在这次冒险开始时堆栈只有一个元素,首先将其删除,然后尝试在完全空的堆栈顶部检索该元素。这当然不存在,整个纸牌屋都倒塌了。
你这两个操作是乱序的。 首先需要取栈top
处的元素;只有 then,在元素安全地隐藏在您自己的变量中之后,您才能到达 pop
堆栈。