Effective STL學習筆記 條款20

2021-08-08 18:48:33 字數 1210 閱讀 2023

在這裡我們強調的是指標,先個例子:

set

ssp;

ssp.insert(new

ssp.insert(new

string("lemon"));

ssp.insert(new

string("banana"));

ssp.insert(new

string("pear"));

for (auto str : ssp)

按照我們正常的想法肯定時要輸出的是:按順序出現的水果,但是實際上呢列印的是這些位址!

列印實際位址對應的資料檢視:

可以看到是根據位址排序,而不是內容。

實際上乙個set只是乙個簡寫,它的全稱是set< string*, less,allocator>

所以說,我們不能使用預設的仿函式less此時應該自定義乙個新的仿函式,來實現這個效果。

書上使用的:binary_function該仿函式已經被棄用。現在我們用新方式實現:

struct stringptrless

}; set

ssp;

//set < string*> ssp;

ssp.insert(new

ssp.insert(new

string("lemon"));

ssp.insert(new

string("banana"));

ssp.insert(new

string("pear"));

for (auto str : ssp)

//另一種輸出方式

copy(ssp.begin(), ssp.end(), ostream_iterator(cout, "\t"));

檢視列印:

可以看到是按照字母順序排序的。

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...

Effective STL學習筆記 條款40

舉個例子,假設我有乙個widget 指標的list和乙個函式來決定這樣的指標是否確定乙個感興趣的widget class widget bool isinsteresting const widget pw 查詢第乙個感興趣的widget,這很容易 auto iter std find if wid...