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

  • 相关阅读:
    js基础面试篇
    vue自定义指令
    vue兄弟节点通信
    vue----打包上线引用外部cdn
    vue----mockjs
    laravel database opearate1
    laravel seeding
    backtotop组件
    配置节流函数
    failed at the chromedriver@2.33.2 install script
  • 原文地址:https://www.cnblogs.com/shzr/p/9826690.html
Copyright © 2011-2022 走看看