关于$namespace$和重载运算符

$namespace$

  还记得列队和天天爱跑步吗?记得当时写部分分写的非常艰难,一大原因就是部分分之间有很多重名的数组,而且大小还不一样大,经常写着写着就串了,而且$maxn$有一次提交时用错了直接全部$MLE$.

  虽然正解一般没有这么麻烦,可是考场上不一定能想到正解.根据往年经验,$NOIP$的部分分是非常丰富的,比如列队那题:用四个部分分的程序拼凑就可以得到$80$分的好成绩,而且比满分做法好想不少.天天爱跑步也有五个部分分,相对来说好写的也有$60$分.这才是考试的正确策略嘛...

  还有的题需要缩点后重新建图,或者是建一张反图,以前我喜欢这样:

 1 void add1 (int x,int y)
 2 {
 3     g[++h].too=y;
 4     g[h].nex=firs[x];
 5     firs[x]=h;
 6 }
 7 void add2 (int x,int y)
 8 {
 9     G[++H].too=y;
10     G[H].nex=Firs[x];
11     Firs[x]=H;
12 }

  然而仅仅依靠大小写区分实在是太困难了,一不注意就会写错,还非常难发现。

  直到有一天烜神仙告诉我可以开多个$namespace$...

  真的很好用啊,而且一点都不难学.

  一个简易版的教程:首先把$using$ $namespace$ $std$去掉,然后全面使用$cin$,$cout$,系统自带的$min$,$max$,此时这些语句前面就必须使用$std::$,等用习惯了换上自己的$namespace$就好了.

  这个教程清晰易懂:http://www.runoob.com/cplusplus/cpp-namespaces.html

  重载运算符

  手写堆是不可能手写堆的,这辈子也不可能手写堆的.

  但是...如果要把结构体放进堆里呢?以前一直凑合,比如说堆优化最短路时就用$pair$,毕竟这个是自动按照第一维排序的,但是复杂一些的结构就不能再这么凑合了.决定学一下重载运算符.

  这个一定要小心,有时候在自己的电脑上过了,交上去却$CE$,一个相对来说比较稳妥的方式就是“凡是模板上写的,一字不差的抄下来;凡是教程上说的,一字不漏的背下来”.

 1 struct z
 2 {
 3     int v;
 4     bool operator > (const z &a) const {
 5         return v>a.v;
 6     }
 7     bool operator < (const z &a) const {
 8         return v<a.v;
 9     }
10 };

  考试之前一定再看看,不过能不用尽量不用,毕竟不是太熟练.

  ---shzr

原文地址:https://www.cnblogs.com/shzr/p/9826690.html