#include
#include
#include
using namespace std;
stack s;
int main()
{
for(int i=0;i<10;i++)
{
printf("入栈:%d \n",i);
s.push(i);
}
printf("\n");
for(int i=0;i<s.size();i++)
{
printf("出栈:%d\n",s.top());
s.pop();
}
}
输出结果很怪异:
for(int i=0;i<s.size();i++)
每进行一次出栈 s.size()都会减一;出栈的循环只进行了5次
你把for(int i=0;i<s.size();i++)写成
int count=s.size();
for(int i=0;i<count;i++)
这行判断:
for(int i=0;i<s.size();i++)
当s中元素少了之后,相应的s.size()就变小了,当然就循环不下去了。
解决的方式:
一种,将初始的s.size()赋值给另外一个变量slen,然后for循环中用 i < slen来判断。
另一种, for循环改成直接用s.size来判断:
while(s.size()>0)