我的代码有问题,导致运行时错误。为了调试我在一些 cout 语句中抛出的代码,以找到代码正确执行的最后一个位置。根据输出,当 while 条件评估为 false 时,while 语句似乎中断,但我看不出这是怎么可能的。这是代码:
变量声明:
queue<string> newOrder;
stack< vector<char> > opStack;
char symbol;
发生填充堆栈和队列的事情,然后到达此代码:
while(opStack.empty()==false){
if(opStack.top()[1] != 'L'){
cout<<"is stack empty?:"<<opStack.empty()<<endl;
symbol = opStack.top()[0];
newOrder.push(symbol);
opStack.pop();
cout<<"popped stack;"<<endl;
cout<<"is stack empty?:"<<opStack.empty()<<endl;
}
else{
break;
}
}
cout<<"made it out of while loop";
if(opStack.top()[1] == 'L'){
opStack.pop();
}
else{
errorEncountered = true;
}
这是输出:
is stack empty?:0
popped stack;
is stack empty?:1
RUN FAILED (exit value 1, total time: 1s)
因此,根据输出,堆栈在循环结束时为空。这应该使 while 循环条件为假,但程序在 while 循环退出之前失败。这怎么可能?它与堆栈的工作方式有关吗?