stl中的排序 3 find find if

2021-10-18 08:28:56 字數 1651 閱讀 3029

直接上原始碼:

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 對給定區間...