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 elseif (b.t2 else ...;
即為所求。
**:
1 #include 2 #include3using
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...