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的头文件里

猜你喜欢

转载自blog.csdn.net/qq_42265158/article/details/83625900