<algorithm>
头文件中,因此使用该函数之前,程序中要先引入此头文件:
#include <algorithm>
//以判断两者相等作为匹配规则 InputIterator find_first_of (InputIterator first1, InputIterator last1, ForwardIterator first2, ForwardIterator last2); //以 pred 作为匹配规则 InputIterator find_first_of (InputIterator first1, InputIterator last1, ForwardIterator first2, ForwardIterator last2, BinaryPredicate pred);其中,各个参数的含义如下:
find_first_of() 函数用于在 [first1, last1) 范围内查找和 [first2, last2) 中任何元素相匹配的第一个元素。如果匹配成功,该函数会返回一个指向该元素的输入迭代器;反之,则返回一个和 last1 迭代器指向相同的输入迭代器。有关谓词函数,读者可阅读《C++谓词函数》一节详细了解。
举个例子:注意,当采用第一种语法格式时,如果 [first1, last1) 或者 [first2, last2) 范围内的元素类型为自定义的类对象或者结构体变量,此时应对 == 运算符进行重载,使其适用于当前场景。
#include <iostream> // std::cout #include <algorithm> // std::find_first_of #include <vector> // std::vector using namespace std; //自定义二元谓词函数,作为 find_first_of() 函数的匹配规则 bool mycomp(int c1, int c2) { return (c2 % c1 == 0); } //以函数对象的形式定义一个 find_first_of() 函数的匹配规则 class mycomp2 { public: bool operator()(const int& c1, const int& c2) { return (c2 % c1 == 0); } }; int main() { char url[] = "http://c.biancheng.net/stl/"; char ch[] = "stl"; //调用第一种语法格式,找到 url 中和 "stl" 任一字符相同的第一个字符 char *it = find_first_of(url, url + 27, ch, ch + 4); if (it != url + 27) { cout << "*it = " << *it << '\n'; } vector<int> myvector{ 5,7,3,9 }; int inter[] = { 4,6,8 }; //调用第二种语法格式,找到 myvector 容器中和 3、5、7 任一元素有 c2%c1=0 关系的第一个元素 vector<int>::iterator iter = find_first_of(myvector.begin(), myvector.end(), inter, inter + 3, mycomp2()); if (iter != myvector.end()) { cout << "*iter = " << *iter; } return 0; }程序执行结果为:
*it = t
*iter = 3
template<class InputIt, class ForwardIt, class BinaryPredicate> InputIt find_first_of(InputIt first, InputIt last, ForwardIt s_first, ForwardIt s_last, BinaryPredicate p) { for (; first != last; ++first) { for (ForwardIt it = s_first; it != s_last; ++it) { //第二种语法格式换成 if (p(*first, *it)) if (p(*first, *it)) { return first; } } } return last; }
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有