写个stl程序

明天就要acm课考试了,可是一学期几乎没去上过课(感觉有点对不住lcy老师啊。、、),肿么办。。没办法,只能临时抱抱佛脚,于是拿出了尘封已久的《算法竞赛入门经典》,话说当初刚接触acm的时候真心挺佩服刘汝佳的,大神啊,大二是就是世界第四了。可一年多过去后发现自己对这个没多少兴趣了。。

关于linux的参数执行顺序。。

        今天在看正则表达式的时候遇到了两个问题,用vi打开/etc下的sysctl.conf的时候会发现有许多空白行和注释行。但是有时候stdout的时 候并不需要这些信息,若是打印时则更能节省纸张资源。-_-!于是我用grep命令将其去除,具体指令为grep -v ‘^$’ /etc/sysctl.conf|grep -v ‘^#’可是运行完该句之后的结果着实让我头疼,因为我发现注释行仍然出现了,而且前面还多了一个数字。往上一检查才发现自己多打了一个n。。命令变成了 grep -vn ‘^$’ /etc/sysctl.conf|grep -v ‘^#’。
        这对我来说是个不错的收获。因为大家都知道管道命令会把前者的stdout转换为后者的stdin,而碰巧的是n正好有是grep的一个参数,用于输出行 号。于是后者的stdin的每行的开始都有了行号。这样每行的开始都不是#字符了,注释也就自然没被去除。看来管理时真的要小心谨慎,一不小心结果就会发 生错误。另外,如果有些童鞋在不是自己的主机上执行该命令的时候会发现命令完全正确,可是结果还是有类似错误。这时候很可能是因为grep被该用户 alias过的原因。比如该用户alias grep=’grep -v’.这样会有更奇怪的结果哦(会有两列行号^_^)当然这点如果多执行命令的话也是可以发现的,其实type grep一下就·ok。而且一般人不会这么做,毕竟v用于显示没有指定字符串的行。如果真是这个原因,怎么改呢?很简单,去改下用户目录下 的.bashrc文件吧。这个是login shell会读取的文件。里面会初始化一些命令别名,然后会注册一些环境变量。login时会被~/.bash_profile调用。如果发现grep被 alias成带v参数,就赶紧把它注释掉吧。要想立刻生效的话,手动读取一下吧。source ~/.bashrc 这样就ok了。
这时候,,又想到一个问题,上述命令中的参数v和n是哪个先执行呢。联系到最近在win32汇编上学的c调用、stdcall都是右边参数先入栈来看的 话,我想linux应该也类似吧(。。。纯属个人胡扯~~~~)。那样应该是自左向右顺序执行的。从结果来看,空行确实被去除了,那是不是真的是自左向右 的顺序呢。于是验证了一下。grep -nv ‘^$’ /etc/sysctl.conf|grep -v ‘^#’结果空行还是被去除了。看来假设不对。如果自左向右,那么-n执行后每行都有行号,再执行-v不会去除空行。当然这里有个问题,那就是我不清楚第 一个参数执行后是否真正影响了输出,如果行号没被算进去的话执行-v后还是会去除空行的。这样参数执行顺序的问题还是不敢下定论。。可是大年夜的没有网络 可用。看来有机会得去百度一下了。。
不过,这时候,,,天亮了。。下午四五点起床的孩子通宵无压力。。O~睡觉去了。。。
以上分析纯属本人臆测,OS为Cent OS。内核为2.6.32-71.e16.i686。不过我开了下gentoo,发现gentoo的用户~目录下好像没有.bashrc文件、、、
(以上均为本人学习过程中的杂乱思绪,不免大量错误,不做任何参考。。)