zoukankan      html  css  js  c++  java
  • 关于$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

  • 相关阅读:
    基础抽象代数
    斜堆
    WC2018
    WC2019
    有向图上不相交路径计数
    生成树计数
    Pr&#252;fer序列
    反演
    1.1 Linux中的进程 --fork、孤儿进程、僵尸进程、文件共享分析
    Python程序的执行过程 解释型语言和编译型语言
  • 原文地址:https://www.cnblogs.com/shzr/p/9826690.html
Copyright © 2011-2022 走看看