Effective STL學習筆記 條款40

2021-08-11 16:24:45 字數 1082 閱讀 8417

舉個例子,假設我有乙個widget*指標的list和乙個函式來決定這樣的指標是否確定乙個感興趣的widget:

class

widget {};

bool isinsteresting(const widget* pw)

查詢第乙個感興趣的widget,這很容易:

auto iter = std:

:find_if(widgetptrs.begin(), widgetptrs.end(), isinsteresting);

但是如果我們想要獲取第乙個不感興趣的widget:

//c++17  not_fn  replace : not1(c++03),not2(c++03)

auto iter_ = std::find_if(widgetptrs.begin(), widgetptrs.end(), std::not1(isinsteresting));

這樣編譯就會錯誤。原因是not1需要一些typedef的宣告,才能生效。

書上給的方法是使用ptr_func,不過我決定使用c++11的function來重新實現,以下兩種方式都可以實現。

std:

:function(const widget*)> pred =std:

:bind(&isinsteresting, _1);

std:

:function(const widget*)> pred_ = (constwidget*) -> bool ;

auto iter_ = std:

:find_if(widgetptrs.begin(), widgetptrs.end(), std:

:not1(pred));

auto iter__ = std:

:find_if(widgetptrs.begin(), widgetptrs.end(), std:

:not1(pred_));

在這裡說的適配就是這意思,不過unary_function等模板以及在c++11中棄用,被function代替了,所以該出就不書寫了。

Effective STL學習筆記 條款20

在這裡我們強調的是指標,先個例子 set ssp ssp.insert new ssp.insert new string lemon ssp.insert new string banana ssp.insert new string pear for auto str ssp 按照我們正常的想法...

Effective STL學習筆記 條款23

直接進入主題,為什麼會考慮使用vector代替關聯容器呢,可能有這樣的場景,一對關聯的資料,而時使用時要求資料查詢速度很快。當然我們必須知道有序的vector的缺點就是他必須保持有序,乙個新item插入可能造成其他元素的移動。所以這種場景可能在幾乎不插入和刪除時考慮。乙個例子 using pair ...

Effective STL學習筆記 條款30

看個例子 我們使用transform函式給乙個容器承載計算結果 vector src 待計算的資料 vector res 計算結果 src.push back 0 src.push back 1 src.push back 2 src.push back 3 std transform src.be...