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

  • 相关阅读:
    深入理解Elasticsearch写入过程 使用routing会导致docid不再全局唯一 Allocate策略 + routing参数
    force merge原理 + ES写入数据的过程
    Linux内核参数--time-wait回收--不建议设置
    elasticsearch迁移--利用腾讯云cos和nfs
    蓝鲸安装失败
    Apache Tomcat/8.5.51 secretRequired="true"
    自定义Nginx返回页面
    本地yum 源 iso文件 安装ansible
    elasticsearch字段属性值截断为32位
    rabbitmq-consul-apollo部署文档
  • 原文地址:https://www.cnblogs.com/shzr/p/9826690.html
Copyright © 2011-2022 走看看