Boolan STL 第五周
語(yǔ)言層面,STL中算法是function template,其他的容器、迭代器、仿函數(shù)、適配器、分配器都是class template
由于algorithms看不到container,所以iterator必須能提供給algorithms提出問(wèn)題的答案。
iterator的5種類型:

array、vector、deque屬于random_access_iterator_tag
list、rb_tree(set/map等)屬于bidirectional_iterator_tag
forward_list、hashtable(unordered set/map等)屬于forward_iterator_tag
istream_iterator屬于input_iterator_tag
ostream_iterator屬于output_iterator_tag
iterator_category對(duì)算法的影響:可以通過(guò)使用萃取機(jī)識(shí)別出不同的類別的iterator來(lái)重載函數(shù)的不同實(shí)現(xiàn)。如:distance()函數(shù)

iterator_category配合type traits可以使算法針對(duì)不同容器的迭代器產(chǎn)生不同的實(shí)現(xiàn),如copy()

算法源碼中對(duì)應(yīng)該使用哪種類型的iterator有暗示:

通過(guò)給算法傳入自定義functor實(shí)現(xiàn)特定功能:如accumulate()

算法count/count_if:

算法find/find_if:

算法sort使用:

算法binary_search:必須先排序,才能進(jìn)行二分搜尋

仿函數(shù)functor:只為算法服務(wù),必須要根據(jù)參數(shù)數(shù)量繼承unary_function或binary_function才能算可適配的(adaptable),因?yàn)樗峁┝艘恍?huì)被算法問(wèn)到的typedefine


適配器:根據(jù)要改造的東西分為container adapter、iterator adapter、functor adapter,適配器和被改造的原型是combination的關(guān)系。
iterator和functor能提供算法回答所需的typedefine:

函數(shù)適配器:改造functor。如:bind2nd、not1


c++11新適配器bind用法:

迭代器適配器:改造iterator,如reverse_iterator、inserter


x適配器:如istream_iterator和ostream_iterator

