總是優先使用 的字首形式

2021-04-09 10:35:09 字數 727 閱讀 7519

程式設計的時候應該盡可能使用遞增操作符 ++ 和遞減操作符 -- 的字首形式.因為它少建立兩個臨時物件,效率比較高.

還是從**來分析吧,比較有說服力:)

下面是 ++ 和 -- 的字首實現形式:

t& t::operator++()                                       }

下面是 ++ 和 -- 的字尾實現形式:

t t::operator++(int)                                       }

我們來分析一下自增自減的字尾形式所多花費的開銷:

t old(*this);

這一句產生乙個型別為t的臨時物件 old, 並用原值*this進行初始化.當函式return的時候,又再次建立乙個臨時物件,並用old的值進行初始,之後,區域性變數old被銷毀.並用臨時建立的變數對賦值符左邊的變數進行賦值(如果有的話).賦值後,臨時變數再次被銷毀.

而字首形式的自增自減呢?首先函式內沒有建立臨時變數,故這方面的開銷就節省了.其次,返回的是乙個引用,故也節省了這時候建立銷毀臨時物件的開銷.

因此字尾式的自增自減,所多花費的開銷是兩次臨時變數的建立,以及兩次臨時變數的銷毀.如果自增自減的物件不是內建的資料型別,而乙個類型別[當然,你首先得過載自增自減操作符:) ], 那麼這個開銷可能會比較大.因為變成了兩次建構函式以及兩次析構函式的呼叫.

所以在呼叫**的時候,要優先使用字首形式,除非確實需要字尾形式返回原值.

優先佇列的使用

佇列的特點是先進先出。通常都把佇列比喻成排隊買東西,大家都很守秩序,先排隊的人就先買東西。但是優先佇列有所不同,它不遵循先進先出的規則,而是根據佇列中元素的優先權,優先權最大的先被取出。通常把優先佇列比喻成現實生活中的列印。乙個列印店裡有很多印表機,每台機器的效能不一樣,有的印表機列印很快,有的印表...

優先佇列的使用

堆,一種非常重要的資料結構。能實現資料的自動排序,而且排序時間複雜度為o nlogn 在n達到10 4時,o n2 級演算法就容易超時,但堆排序不會。堆可呼叫stl系統函式,簡化 容易書寫。一般情況,如果堆元素為數 字元 字串都可有用預設的排序規則。如果元素是pair型別,其比較大小的方式為先比較第...

7種形式的Android Dialog使用舉例

在android開發中,我們經常會需要在android介面上彈出一些對話方塊,比如詢問使用者或者讓使用者選擇。這些功能我們叫它android dialog對話方塊,在我們使用android的過程中,我歸納了一下,android dialog的型別無非也就7種,下面我分別向大家介紹這7種android...