1. 程式人生 > >STL之find與二分查詢

STL之find與二分查詢

要使用find()函式需包含algorithm標頭檔案。

template <class InputIterator, class T>
InputIterator find (InputIterator first, InputIterator last, const T& val);
以上是find函式的宣告。

所以如果你傳入vector::iterator 型別的迭代器 它也會返回該型別的迭代器。 第一個引數是指向該容器的第一個元素的迭代器,第二個引數是指向該容器最後一個元素的後一個元素的迭代器,第三個引數就是要查詢的target。
注意型別一致。

只有array容器與vector容器能用二分查詢。
二分查詢使用之前要排序。

先介紹一下快速排列的用法 qsort
void qsort (void* base, size_t num, size_t size,
int (compar)(const void,const void*));
以上是該函式的宣告。

第一個引數是指向該容器的第一個元素的指標。一般為c.data().該函式的返回值與該引數一致。
第二個引數為該容器擁有的元素個數。
第三個引數為每個元素的大小。
第四個為函式指標,該函式指標用來比較兩個元素的大小。
如果要排列的為int型 ,傳入函式可像以下這樣寫:

int compare (const void * a, const void * b)
{
return ( (int

)a - (int)b );
}

接下來就可以使用二分查詢
void* bsearch (const void* key, const void* base,
size_t num, size_t size,
int (compar)(const void,const void*));

第一個引數為所要查詢的元素的指標。
第二個引數為指向該容器第一個元素的指標。
第三個引數為該容器元素個數。
第四個引數為該容器所儲存的元素的大小。(sizeof)
第五個引數與上面qsort一致。

qsort與bsearch函式都在cstdlib的標頭檔案裡