直接上原始碼:
template
<
class
inputiterator
,class
t>
inputiterator find
(inputiterator first, inputiterator last,
const t& value)
template
<
class
inputiterator
,class
predicate
>
inputiterator find_if
(inputiterator first, inputiterator last,
predicate pred)
find_if 需要自定義乙個predicate物件pred。要查詢的值value儲存在pred物件中,然後通過pred的仿函式進行比較操作。
通用的寫法如下:
template
<
class
t>
strcut find_t
bool
operator()
(const t value)
const
t v;
}
對於map容器使用find
map的迭代器是用的rb_tree的迭代器
template
<
class
value
,class
ref,
class
ptr>
struct __rb_tree_iterator :
public __rb_tree_base_iterator
__rb_tree_iterator
(link_type x)
__rb_tree_iterator
(const iterator& it)
reference operator*(
)const
#ifndef __sgi_stl_no_arrow_operator
pointer operator
->()
const
#endif
/* __sgi_stl_no_arrow_operator */
self&
operator++(
) self operator++(
int)
self&
operator--(
) self operator--(
int)
};
reference operator*() const
typedef pairvalue_type;
可以看出對map迭代器的operator *操作是取得這個迭代器的value_field。追蹤**可以知道,最終指向pair型別。對pair型別的operator !=操作未定義。所以編譯就不會通過。
所以find函式傳入map的迭代器,結果未知。這樣的用法從理論上也是不合適的。
map有自己的成員函式find。可以滿足我們對map查詢的絕大部分需求。
STL 劃分與排序 3
default 1 template void nth element randomaccessiterator first,randomaccessiterator nth,randomaccessiterator last custom 2 template void nth element r...
STL中的List排序問題
最近想鑽研一下stl源 於是照著侯捷的 stl原始碼剖析 看sgi stl,今天想寫寫list的排序演算法。源 如下 template template void list tp,alloc sort strictweakordering comp carry.swap counter i if i...
STl中的排序演算法詳細解析
全排序即把所給定範圍所有的元素按照大小關係順序排列。sort採用的是成熟的 快速排序演算法 目前大部分stl版本已經不是採用簡單的快速排序,而是結合內插排序演算法 1.所有stl sort演算法函式的名字列表 函式名 功能描述 sort 對給定區間所有元素進行排序 stable sort 對給定區間...