lxidea的 Boolan STL與泛型編程 學(xué)習(xí)筆記(五)

本周主要講的了一些比較智能化的泛型編程方法

  1. 萬(wàn)用的hash function
    對(duì)于每個(gè)hashtable來(lái)說(shuō)昏鹃,都要將放進(jìn)來(lái)的變量或者對(duì)象給定一個(gè)唯一的編號(hào),從而確定這個(gè)變量或?qū)ο髴?yīng)該放到hashtable的哪個(gè)籃子里帽揪。因此灶伊,標(biāo)準(zhǔn)庫(kù)里面對(duì)于如何編號(hào)這件事,也就是hash code是有自己的一套方法的戏挡。而且是萬(wàn)用的货徙,特別是自C++ 2.0以來(lái)左权,因?yàn)檫\(yùn)用了Variadic templates之后。
template<typename... Types>  
inline size_t hash_val(const Types&... args){  
      size_t seed = 0;  
      hash_val(seed, args...);  
      return seed;  
}  
  
template<typename T, typename... Types>  
inline void hash_val(size_t& seed, const T& val, const Type&... args){  
      hash_combine(seed, val);  
      hash_val(seed, args...);  
}  

#include<functional>  
template<typename T>  
inline void hash_combine(size_t& seed, const T& val){  
        seed = std::hash<T>(val) + 0x9e3779b9  
              + (seed << 6) + (seed >> 2);  
}  
//auxiliary generic funtions  
template<typename T>  
inline void hash_val(size_t& seed, const T& val){  
      hash_combine(seed, val);  
}  
  1. Tuple用例
    tuple事實(shí)上痴颊,就是數(shù)之組合赏迟,或元之組合。
    tuple在C++ 11中的實(shí)現(xiàn)也非常優(yōu)美蠢棱,在下面的圖中锌杀。同樣通過Variadic templates,將傳給tuple類的參數(shù)一次一次的遞歸泻仙,每次的遞歸糕再,就會(huì)使當(dāng)前的tuple內(nèi)部繼承一個(gè)tuple,這樣知道最后參數(shù)全部遞歸出去玉转,剩下〇個(gè)參數(shù)的時(shí)候突想,最后就繼承一個(gè)空的tuple類。


    tuple的實(shí)現(xiàn)
  2. Type Traits
    type traits(類型萃取機(jī))能有效地分辨類是否具有某種類型究抓,通過調(diào)用它我們可以實(shí)現(xiàn)對(duì)不同的類型指定不同的操作猾担。下面是它的實(shí)現(xiàn)

  3. Type Traits實(shí)現(xiàn)

struct __true_type{};  
struct __false_type{};  
//泛化  
template<class type>  
struct __type_traits{  
      typedef __true_type this_dummy_member_must_be_first;  
      typedef __false_type has_trivial_default_constructor;  
      typedef __false_type has_trivial_copy_constructor;  
      typedef __false_type has_trivial_assignment_operator;  
      typedef __false_type has_trivial_destructor;  
      typedef __false_type is_POD_type;  //POD = Plain Old Data,代表舊式的class 也就是struct  
}刺下;  
  
//int的特化  
template<>   
struct __type_traits<int>{  
      typedef __true_type has_trivial_default_constructor;  
      typedef __true_type has_trivial_copy_constructor;  
      typedef __true_type has_trivial_assignment_operator;  
      typedef __true_type has_trivial_destructor;  
      typedef __true_type is_POD_type;  
}  
  
//double的特化  
template<>   
struct __type_traits<double>{  
      typedef __true_type has_trivial_default_constructor;  
      typedef __true_type has_trivial_copy_constructor;  
      typedef __true_type has_trivial_assignment_operator;  
      typedef __true_type has_trivial_destructor;  
      typedef __true_type is_POD_type;  
}  

第5和第6事實(shí)上绑嘹,我還沒有來(lái)得及仔細(xì)消化,就先把圖放上來(lái)吧橘茉。

  1. cout


    cout類

    cout類
  2. movable元素對(duì)于deque速度效能的影響


    movable class

    movable class 2
  3. 測(cè)試函數(shù)


    測(cè)試函數(shù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末工腋,一起剝皮案震驚了整個(gè)濱河市蛤克,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夷蚊,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件髓介,死亡現(xiàn)場(chǎng)離奇詭異惕鼓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)唐础,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門箱歧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人一膨,你說(shuō)我怎么就攤上這事呀邢。” “怎么了豹绪?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵价淌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我瞒津,道長(zhǎng)蝉衣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任巷蚪,我火速辦了婚禮病毡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘屁柏。我一直安慰自己啦膜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布淌喻。 她就那樣靜靜地躺著僧家,像睡著了一般。 火紅的嫁衣襯著肌膚如雪裸删。 梳的紋絲不亂的頭發(fā)上啸臀,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音烁落,去河邊找鬼乘粒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛伤塌,可吹牛的內(nèi)容都是我干的灯萍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼每聪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼旦棉!你這毒婦竟也來(lái)了齿风?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤绑洛,失蹤者是張志新(化名)和其女友劉穎救斑,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體真屯,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脸候,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绑蔫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片运沦。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖配深,靈堂內(nèi)的尸體忽然破棺而出携添,到底是詐尸還是另有隱情,我是刑警寧澤篓叶,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布烈掠,位于F島的核電站,受9級(jí)特大地震影響缸托,放射性物質(zhì)發(fā)生泄漏向叉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一嗦董、第九天 我趴在偏房一處隱蔽的房頂上張望母谎。 院中可真熱鬧,春花似錦京革、人聲如沸奇唤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)咬扇。三九已至,卻和暖如春廊勃,著一層夾襖步出監(jiān)牢的瞬間懈贺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工坡垫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梭灿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓冰悠,卻偏偏與公主長(zhǎng)得像堡妒,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子溉卓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容