學習博客1
學習博客2
記得很久以前學\(Dijkstra\)的堆優化的時候\(gxb\)神仙給我講過,當時就是不明白感受\(gxb\)都要崩潰了的亞子,好歹算是知道了,可是隨着時間的流逝,他居然趁我不注意從我腦子裏跑了!\(gxb\)正拿着刀在趕來的路上html
咱們能夠重定義或重載\(C++\)內的大部份內置運算符。node
+ | - | * | / | % |
---|---|---|---|---|
! | = | < | > | += |
^= | &= | |= | << | >> |
<= | >= | && | || | ++ |
[] | () | new | delete | new[] |
. | :: | .* | ?: | sizeof |
---|
\(\color{red}{重載的運算符是帶有特殊名稱的函數,函數名是由關鍵字operator和其後要重載的運算符符號構成的。 }\)
與其餘函數同樣,重載運算符有一個返回類型和參數列表函數
Node operator<(const Node &n);
聲明把小於號這個運算符用於把兩個\(Node\)對象比較大小,返回最終的\(Node\)對象。學習
成員函數:假設咱們定義一個結構體\(student\),這個結構體裏有\(age,score\)等,而這個\(age,score\)就是成員函數(我的理解,若是有誤歡迎指正)優化
大多數的重載運算符能夠被定義爲普通的非成員函數(就是咱們平時寫的各類函數)或者被定義爲類成員函數。spa
若是咱們定義上面的函數爲類的非成員函數,很明顯的,因爲要比較因此咱們須要穿兩個參數給他。code
Node operator<(const Node a,const Node b)
相應的若是咱們要把他定義爲一個成員函數(這裏貼一下\(Dijkstra\)的結構體裏的重載運算符)
由於priority_queue
寫法一:
struct Node { int u, v; friend bool operator<(const Node a, const Node b){ return a.u > b.u; } };
\(friend\)是友元函數,什麼是友元函數我也不知道反正\(lfd\) 跟我說不用學,還說這個東西能夠用來裝\(b\),可是若是用很差會\(CE\)很長時間。
寫法二:對象
struct Node { int u, v; bool operator<(const Node &b) const { return u > b.u; } };
謝謝收看,祝身體健康!blog