1. 程式人生 > >關於$namespace$和過載運算子

關於$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