遇到一个c++里stack的问题,没法pop出所有的元素

#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)