C介面與實現 之三

2021-09-17 02:47:42 字數 982 閱讀 5241

這本書有種相見恨晚,如果在學習資料結構之前看的話,**的可閱讀性肯定會有很大的提公升,一直在想乙個問題,類似的書為啥國外版的就要好很多,這裡並不是一味地的說外國的東西好, 看看這些書的練習體你就知道了,國外的是在教你怎樣去思考乙個問題,乙個問題之後有更多的問題讓你思考,而國內c語言相關書的練習題都是抄來抄去。基本還停留在列印乙個星星之類。

第三章就是教你怎樣寫乙個更好的hashtable, 針對hash碰撞問題在習題3.1中給出的一方案叫你去驗證比較,之後又給了一些可供參考的hash演算法。好的一本書就當如此,在不斷的叫你思考。

下面來看看書中例子的分散圖:

其中橫座標表示0-2048的入口,縱座標表示陣列每個入口裡面被hash的string,可以看到我們的分布式極不均勻的。理論上10000個string應該是均勻的分布到2048上的,也就是每個入口上有5個左右的字串。再來看看其對應的直方圖:

可以看到一半左右的入口是空的。

下面來看看buckets為2039並使用如下的hash函式優化後的效果:

for (h = 0, i = 0; i < len; i++) 

h &= 0x7fffffff;

h %= nelems(buckets);

分散圖:

對應的直方圖:

可以看到其符合二項分布的規律,相對於之前的函式分布的要均勻很多。

-end-

C 介面與實現

公有繼承 inte ce and implementation 三種繼承的方式 pure virtual function 只繼承基類的介面,要在派生類中重寫該函式的實現。至於是在子類中實現還是子類的子類中實現都無所謂,關鍵是需要例項化的類就需要實現,不然物件是無法建立的。virtual funct...

基於C 的介面基礎教程之三

第三節 定義介面成員 介面可以包含乙個和多個成員,這些成員可以是方法 屬性 索引指示器和事件,但不能是常量 域 操作符 建構函式或析構函式,而且不能包含任何靜態成員。介面定義建立新的定義空間,並且介面定義直 接包含的介面成員定義將新成員引入該定義空間。說明 1 介面的成員是從基介面繼承的成員和由介面...

基於C 的介面基礎教程之三

inte ceimytest eventeventhandlere voidf intvalue stringp publicdelegatevoideventhandler objectsender,eventargse publicdelegatevoidstringlistevent istr...