C++ 算法 find_first_of()函数
C++算法find_first_of()函数比较两个容器中存储的值,即[first1,last1)和[first2,last2)。如果在[first1,last1)范围内找到与[first2,last2)范围内的元素相似的元素,则函数将返回指向该元素的迭代器。在两个范围中存在多个相似元素的情况下,返回第一个相似元素的迭代器。如果在范围中没有两个公共元素,则返回指向last1元素的迭代器。
语法
template<class ForwardIterator1, classForwardIterator2>
ForwardIterator1 find_first_of(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2);
template<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>
ForwardIterator1 find_first_of(ForwardIterator1 first1,ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred);
参数
first1 :它是指向范围[first1, last1)中第一个元素的正向迭代器,该元素本身包含在范围内。
last1 :它是指向范围[first1, last1)中最后一个元素的正向迭代器,该元素本身不包含在范围内。
first2 :它是指向范围[first2, last2)中第一个元素的正向迭代器,该元素本身包含在范围内。
last2 :它是指向范围[first2, last2)中最后一个元素的正向迭代器,该元素本身不包含在范围内。
pred :它是一个二元函数,接受两个元素作为参数,并执行函数设计的任务。
返回值
该函数返回一个迭代器,指向范围[first1, last1)中第一个既是范围[first2,last2)的一部分又是公共元素的元素。如果找不到这样的元素,则函数返回last1元素。
示例1
#include <iostream>
#include <algorithm>
#include <vector>
#include <cctype>
bool case_insensitive (char a1, char a2)
{
return (std::tolower(a1)==std::tolower(a2));
}
int main ()
{
int newchars[] = {'a','b','c','A','B','C'};
std::vector<char> haystack (newchars,newchars+6);
std::vector<char>::iterator ti;
int patt[] = {'A','B','C'};
ti = find_first_of (haystack.begin(), haystack.end(), patt, patt+3);
if (ti!=haystack.end())
std::cout << "Match 1 is: " << *ti << '\n';
ti = find_first_of (haystack.begin(), haystack.end(),
patt, patt+3, case_insensitive);
if (ti!=haystack.end())
std::cout << "Match 1 is: " << *ti << '\n';
return 0;
}
输出:
Match 1 is: A
Match 1 is: a
示例2
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string str1 = "We are trying to get an idea of the find_first_of function in C++";
string str2= {'a','A','e','E','i','I','o','O','u','U'};
auto pi = std::find_first_of(str1.begin(), str1.end(), str2.begin(), str2.end());
cout<<"First vowel has been discovered at index "<<(pi-str1.begin())<<"\n";
return 0;
}
输出:
First vowel has been discovered at index 1
复杂度
函数的复杂度由count1*count2指定。这里countX指定了firstX和lastX之间的距离。比较会一直进行直到找到匹配的元素。
数据竞争
从两个范围中访问了一些元素。
异常
如果任何一个参数抛出异常,该函数会抛出异常。