主要函数
查询操作是最广的操作,STL主要提供了一下查询函数。
- find():在迭代器中序列中找出某个值第一次出现的位置。
- find_if():在单迭代器序列中找出符合谓词的第一个元素。
- find_first_of():在双迭代器中找出一子序列中某元素第一次出现的位置。
- adjacent_find():在单迭代器中找出第一次相邻值相等的元素的位置。
- find_end():在双迭代器序列中找出一子序列最后一次出现的位置。
- search():在双迭代器序列中找出一子序列第一次出现的位置。
- search_n():在单迭代器序列中找出一个值连续n次出现的位置。
各个函数原型如下所示:
1) find
原型:
template <class InIt, class T>
InIt find(InIt first, InIt last, const T & val)
参数说明:
- InIt:输入迭代器,first表示起始元素的迭代器指针,last表示结束元素的迭代器指针。
- T:模板类型参数
该函数是查询[first, last)间迭代器对应的元素值是否有等于val的,若有则返回器迭代器指针;若无则返回last。可知查询的个数范围是N属于[0, last - first),由于要判定*(first+N) == val,因此模板T对应的类必须重载运算符“operate==”
2) find_if
原型:
template<class InIt, class Pred>
InIt find_if(InIt first, InIt last, Pred pr);
参数说明:
- InIt:输入迭代器,first表示起始元素的迭代器指针,last表示结束元素的迭代器指针。
- Pred:普通全局函数或一元函数对象,返回值是bool类型。
该函数是查询[first, last)间迭代器对应的元素*(first+i), 若pr(*(first + i))返回true,则返回此时的迭代器指针,表明满足条件的元素已经找到;若没有找到则返回last。
3) find_first_of
原型:
templat<class FwdIt1, class FwdIt2>
FwdIt1 find_first_of(FwdIt1 first1, FwdIt1 last1, FwdIt2 first2, FwdIt2 last2);
template<class FwdI1, class FwdIt2, class Pred>
FwdIt1 find_first_of(FwdIt1 first1, FwdIt1 last1, FwdIt2 first2, FwdIt2 last2, Pred pr);
参数说明:
- FwdIt1, FwdIt2:前向迭代器,first表示起始元素的迭代器指针,last表示结束元素的迭代器指针。
- Pred:二元全局函数或函数对象。
第一个原型含义是:若第一个前向迭代器[first1, last1)间第N个元素与第二个前向迭代器[first2, last2)间的某个元素相等,且N最小则返回first1+N。表明第一个前向迭代器FwdIt中有元素与第二个前向迭代器FwdIt2中的元素相等,否则返回last1.
第二个原型与第一个相似,不知过要定义预判定函数pr(*(first1 + N), *(first2 + M))。
4) adjacent_find()
原型:
template<class FwdIt>
FwdIt adjacent_find(FwdIt first, FwdIt last);
template<class FwdIt, class Pred>
FwdIt adjacet_find(FwdIt first, FwdIt last, Pred pr);
参数说明:
- FwdIt:前向迭代器,first表示起始元素的迭代器指针,last表示结束元素的迭代器指针。
- Pred:二元全局函数或函数对象。
第一个原型含义是:若前向迭代器FwdIt中存在第N个元素,有*(first+N)==*(first +N +1),且N最小,则表明有两个相邻元素是相等的,返回(first+N),否则返回last。
第二个原型与第一个相似,只不过要定义与判定函数pr(*(first+N), *(first + N + 1)).
5) find_end
原型:
template<class FwdIt1, class FwdIt2>
FwdIt find_end(FwdIt1 first1, FwdIt1 last1, FwdIt2 first2, FwdIt2 last2);
template<class FwdIt1, class FwdIt2, class Pred>
FwdIt1 find_end(FwdIt1 first1, FwdIt last1, FwdIt2 first2, FwdIt2 last2, Pred pr);
参数说明:
- FwdIt1, FwdIt2:前向迭代器,first表示起始元素的迭代器指针,last表示结束元素的迭代器指针。
- Pred:二元全局函数或函数对象。
第一个原型含义是:若前向迭代器FwdIt1从地N个元素开始:*(first1 + N) == * (first2+0), *(first1 +N+1) == *(first2 + 1)
,... , *[first1+(last2-first2 - 1) == *[first2+(last2-first2 -1), 且N最大,则返回(first1+N),否则返回last1。即返回在FwdIt元素中最后一次完全与FwdIt序列元素匹配的开始位置。
第二个原型与第一个相似,只不过要定义预判断函数pr(*(first1+N+M), *(first2+N+M).
6)search()
原型:
template<class FwdIt1, class FwdIt2>
FwdIt search(FwdIt first1, FwdIt1 last1, FwdIt2 first2, FwdIt2 last2);
template<class FwdIt1, class FwdIt2, class Pred>
FwdIt1 search(FwdIt1 first1, FwdIt1 last1, FwdIt2 first2, FwdIt2 last2, Pred pr);
参数说明:
- FwdIt1, FwdIt2:前向迭代器,first表示起始元素的迭代器指针,last表示结束元素的迭代器指针。
- Pred:二元全局函数或函数对象。
第一个原型含义是:若前向迭代器FwdIt1从地N个元素开始:*(first1 + N) == * (first2+0), *(first1 +N+1) == *(first2 + 1)
,... , *[first1+(last2-first2 - 1) == *[first2+(last2-first2 -1), 且N最大,则返回(first1+N),否则返回last1。即返回在FwdIt元素中首次完全与FwdIt序列元素匹配的开始位置。
第二个原型与第一个相似,只不过要定义预判断函数pr(*(first1+N+M), *(first2+M).
7)search_n
原型:
template<class FwdIt, class Dist, class T>
FwdIt search_n(FwdIt first, FwdIt last, Dist n, const T & val);
template<class FwdIt, class Dist , class T, class Pred>
FwdIt search_n(FwdIt first, FwdIt last, Dist n, const T& val, Pred pr);
参数说明:
- FwdIt:前向迭代器,first表示起始元素的迭代器指针,last表示结束元素的迭代器指针。
- n:整型变量,表示大小。
- val:待比较的值。
- Pred:二元全局函数或函数对象。
第一个原型含义是:在前向迭代器FwdIt中,从第N个元素开始连续的n个元素满足:*(first + N) == val, *(first+1) == val, ..., *(first +N +n) = val,且n最小,则返回*(first+N),否则返回last。
第二个函数原型与第一个相似,只不过要定义预判定函数pr(*(first + N + M), val)
student表,查询
find_serial_string例子: