set原始碼之心得

2021-09-08 18:14:33 字數 1317 閱讀 4957

c++的stl很強大,強大到我只願慵懶地去使用而不知其所以然。直到李師問我,我的回答被李師否定,我方才意識到自己是多麼地淺陋。希望自己有空抽時間把stl原始碼給研究一下,化為自己真正可以掌控的力量。

set容器的原型:templateclass compare=less,class alloc=stl_default_allocator(key) >。

operator @;//

傳入的比較符號

type a, b;

if(a @ b) ...;

else

if(b @ a) ...;

else

...//

得到a與b的「大小」關係

當下有這樣乙個需求:現有乙個資料庫,裡面記錄了若干ip段(即某個範圍內所有ip)和ip點(某個ip),現乙個使用者發來請求報文,我們需要判斷該使用者的ip是否在資料庫中已記錄。簡化一下,這裡的ip簡化為乙個正整數,大小不超過100。編碼實現這個需求的解決方案。

思路:由於存在段和點,我們統一處理為段,即點轉化為兩端點相同的段,如此,我們求使用者ip段與現有集合ip段是否有交集即可。設段為[t1,t2],則利用set容器

if (a.t2 else

if (b.t2 else ...;

即為所求。

**

1 #include 2 #include 

3using

namespace

std;45

struct

info612

};13

14set

data;

1516

void

input ();

17bool

search ();

18 inline void output (bool

);19

20int

main ()

2126

27void

input ()

2837 cin >> n;//

時間點38

for (int i = 1; i <= n; i++)

3944}45

bool

search ()

4656

else

5760

}61 inline void output (bool

tmp)

6268

else

6973 }

原始碼閱讀心得

簡單記錄一下自己最近一段時間閱讀乙個c語言開源專案的心得 1 閱讀工具 source insight 4.0 gdb typora 2 閱讀心得 1 不要陷在 的實現細節裡面出不來,浪費時間。因為稍微大一點的開源專案,都有很多自定義的結構體,這些結構體封裝了大量的實現細節,特別是c語言的指標滿天飛,...

STL原始碼分析set

include include using namespace std int main set iset ia,ia 5 cout size iset.size endl cout 3 count iset.count 3 endl iset.insert 3 cout size iset.siz...

Set介面原始碼解析

set介面原始碼解析 無順序,不包含重複的元素 public inte ce set extends collection 繼承了collection介面的所有方法 顯示集合的大小 int size 驗證集合是否為空 boolean isempty 驗證集合是否包括o元素 boolean conta...