|
钱能的C++上讲到栈这一节时,只是理论的讲了栈的原理,实际的代码操作实现都没有讲,一笔代过,只留下一个排车厢顺序的例子,看了一整天也看不懂,例子如下:
#include <iostream>
#include <fstream>
#include <sstream>
#include <stack>
using namespace std;
int main()
{ifstream in("rail.txt");
for(int n,line=0;in>>n&&n&&in.ignore();)
{cout<<line++?"\n":"";
for(string s;getline(in,s)&&s!="0";)
{istringstream sin(s);
stack<int> st;
for(int last=0,coach;sin>>coach;st.pop())
{for(int p=last+1;p<=coach;p++) st.push(p);
if(last<coach) last=coach;
if(st.top()!=coach) break;
}
cout<<(!sin?"yes\n":"no\n");
}
}
}
rail.txt:
5
3 2 1 5 4
5 4 1 2 3
0
6
6 5 4 3 2 1
0
0
运行结果为:
yes
no
yes
这个程序里的pop()前面刚刚定义了一个stack,什么都没有往栈里压,pop个什么劲呀,
还设了一个last变量实在不明白作者什么意思,因此导致后面根本看不懂了,看了一整天,直看到用头撞墙n回,实在受不了了,希望各位前辈帮帮我,给我解释一下这个程序,尤其是stack<int> st;
for(int last=0,coach;sin>>coach;st.pop())
{for(int p=last+1;p<=coach;p++) st.push(p);
if(last<coach) last=coach;
if(st.top()!=coach) break;
}
cout<<(!sin?"yes\n":"no\n");
这段,不胜感激,最好能把以后可能经常用到的栈函数告我一些,先谢谢拉. |
|