C Primer 泛型演算法閱讀有感

2021-08-29 03:11:27 字數 660 閱讀 7204

這個月做vc++介面又有些精進,經驗值也有所提高,但對於gdi操作還是接觸不多,抽點時間又看了十幾頁c++ primer,模板的推演、泛型演算法部分也是朦朧:主要是沒實際應用過,但是不能說是白看了,但對於思維的延伸還是有點幫助。

比如,在泛型演算法中函式指標和inline函式之間的效率比較,對於溫習一下inline函式還是不錯的。

實際例子-實現字串排序,這裡使用stable_sort演算法,同時要求按字串長度進行排序,下面用less_than函式實現兩字串小於、等於操作:

bool less_than( const string & s1, const string & s2 )

然後將函式指標less_than作引數傳遞給stable_sort,實現排序操作。傳遞函式指標也同時捨棄了inline,要知道使用inline的函式會在編譯時被展開,編譯完成後inline函式中的**直接被「嵌入」當前呼叫它的塊語句中,程式執行時直接執行less_than函式中**,而不是像呼叫一般函式時,首先尋找函式位址,然後呼叫其中**。如何實現inline函式?最簡單的是做乙個函式物件(stable_sort可以接受函式指標和物件引數),注意到()操作符被過載,實現比較功能,同時也保留了inline特性:

// 函式物件:小於操作被實現為operator()的乙個例項

class lessthan

};

C Primer筆記 泛型演算法

地點 基地 泛型演算法並不直接操作容器,而是遍歷兩個迭代器指定的乙個元素範圍,如此將演算法是作用容器分離,實現通用性。泛型演算法多數定義在標頭檔案algorithm中。比如我們想在vector下找到乙個特定值,可實現如下 include include includeusing namespace ...

C primer筆記 泛型演算法

1 泛型演算法 演算法是因為其實現了一些經典演算法的公共介面,如排序和搜尋。泛型是因為他們可以作用於不同型別的元素和多種容器型別甚至是內建陣列。故稱泛型演算法 2 基本上都定義在algorithm和numeric兩個標頭檔案中,這些演算法遍歷由兩個迭代器指定的乙個元素範圍來進行操作,不對容器進行直接...

C Primer 泛型演算法簡述

重排容器元素的演算法 泛型演算法 大多數演算法都定義在標頭檔案algorithm中,標準庫的標頭檔案numeric中定義了一組數值型演算法。泛型演算法的作用是通過迭代器間接訪問容器,不會執行容器的操作,只執行在迭代器之上,迭代器可以做什麼,泛型演算法就可以做什麼。迭代器演算法不依賴於容器,但演算法依...