《STL源码剖析》学习--STL体现的思想
STL總是盡量做到節(jié)省內(nèi)存且效率最高,在看本書中也越來越有深的體會。這里搜集一個stl中提高效率的方法。
1.對象的復(fù)制、析構(gòu)等
如果將一個區(qū)間中的所有的對象析構(gòu)掉,這是如果范圍很大,每個析構(gòu)都是無關(guān)痛癢的,對效率有很大傷害。
負(fù)責(zé)對象析構(gòu)的destroy()有兩個版本,第一個版本直接調(diào)用對象的析構(gòu)函數(shù);第二個版本,如果對象的析構(gòu)是無關(guān)痛癢的(其__type_traits<T>是true),則什么也不做,否則,調(diào)用第一個版本。
同理復(fù)制操作,如果復(fù)制操作是trivial assignmentoperator,則復(fù)制直接以最快的內(nèi)存對拷貝方式(memmove())完成。
2.算法
stl的算法優(yōu)化非常好,針對不同的迭代器,如forward、bidirectional、random iterator等,因?yàn)樵氐脑L問規(guī)則不一樣,設(shè)計了不同的算法。
stl算法中經(jīng)常使用雙層架構(gòu),一般稱呼上層函數(shù)為dispatch function(分派函數(shù)、派送函數(shù)),令函數(shù)傳遞調(diào)用過程中產(chǎn)生迭代器類型(iterator category)的臨時對象,再利用編譯器的參數(shù)推導(dǎo)機(jī)制(argumentdeduction),自動調(diào)用某個函數(shù)。
上層函數(shù)調(diào)用時不分類型對待,其中來根據(jù)參數(shù)或者模板的類別,調(diào)用下層這個函數(shù)就會根據(jù)傳入的參數(shù)的類型分別重載不同的版本,來達(dá)到效率最高。一般嵌套調(diào)用的這個函數(shù)的某個參數(shù)為某個模板類型的value_type。
總結(jié)
以上是生活随笔為你收集整理的《STL源码剖析》学习--STL体现的思想的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《STL源码剖析》--知识点
- 下一篇: Effective C++ --1 让自