原文地址:http://www.cplusplus.com/reference/algorithm/find_first_of/
function template
<algorithm>
std::find_first_of
equality (1) | template <class InputIterator, class ForwardIterator>
ForwardIterator1 find_first_of (InputIterator first1, InputIterator last1,
ForwardIterator first2, ForwardIterator last2);
|
---|---|
predicate (2) | template <class InputIterator, class ForwardIterator, class BinaryPredicate>
ForwardIterator1 find_first_of (InputIterator first1, InputIterator last1,
ForwardIterator first2, ForwardIterator last2,
BinaryPredicate pred); |
Find element from set in range
Returns an iterator to the first element in the range [first1,last1)
that matches any of the elements in [first2,last2)
. If no such element is found, the function returns last1.返回一个迭代器,指向范围[first1,last1)中第一个匹配到[first2,last1)中的任一(并不要求全部匹配)元素。如果没有匹配的,则返回last1.
例子:
#include <iostream>
#include <vector>
#include <array>
#include <algorithm>
using namespace std;
void findfirstof()
{
vector<int> v1{1,2,3,4,5,6,3,4,9,8};
int arr[]={4,8};
array<double,2> ai{77,88};
cout<<"v1=";
for(int &i:v1)
cout<<i<<" ";
cout<<endl;
cout<<"arr=";
for(int &i:arr)
cout<<i<<" ";
cout<<endl<<"ai=";
for(double &i:ai)
cout<<i<<" ";
cout<<endl<<"auto it=find_first_of(v1.begin(),v1.end(),arr,arr+2);"<<endl;
auto it=find_first_of(v1.begin(),v1.end(),arr,arr+2);
cout<<"*(it-1)="<<*(it-1)<<endl;
cout<<"*it="<<*it<<endl;
cout<<"*(it+1)="<<*(it+1)<<endl;
cout<<endl<<"auto it2=find_first_of(v1.begin(),v1.end(),ai.begin(),ai.end());"<<endl;
auto it2=find_first_of(v1.begin(),v1.end(),ai.begin(),ai.end());
cout<<"*(it2-1)="<<*(it2-1)<<endl;
cout<<"*it2="<<*it2<<endl;
cout<<"*(it2+1)="<<*(it2+1)<<endl;
}
例子:
可以看到,只要匹配到一个元素符号要求,就返回。
[first1,last1)
are sequentially compared to each of the values in [first2,last2)
using operator==
(orpred, in version (2)), until a pair matches.[first1,last1)中的每一个元素依次和[first2,last2)中的每一个元素匹配,直到一个匹配出现。
The behavior of this function template is equivalent to:
(仔细看下面的代码就能看出来)
| |
Parameters
-
first1, last1
-
Input iterators to the initial and final positions of the searched sequence. The range used is
[first1,last1)
, which contains all the elements between first1 and last1, including the element pointed by first1 but not the element pointed by last1.
first2, last2
-
Forward iterators to the initial and final positions of the element values to be searched for. The range used is
[first2,last2)
.
For (1), the elements in both ranges shall be of types comparable usingoperator==
(with the elements of the first range as left-hand side operands, and those of the second as right-hand side operands).
pred
-
Binary function that accepts two elements as arguments (one of each of the two sequences, in the same order), and returns a value convertible to
bool
. The value returned indicates whether the elements are considered to match in the context of this function.
The function shall not modify any of its arguments.
This can either be a function pointer or a function object.
Return value
An iterator to the first element in[first1,last1)
that is part of [first2,last2)
.If no matches are found, the function returns last1.
返回一个迭代器,指向范围[first1,last1)中第一个匹配到[first2,last1)中的任一(并不要求全部匹配)元素。如果没有匹配的,则返回last1.
Example
| |
Output:
The first match is: A
The first match is: a
|
Complexity
Up to linear incount1*count2
(where countX is the distance between firstX and lastX): Compares elements until a match is found.Data races
Some (or all) of the objects in both ranges are accessed (once at most in the case of[first1,last1)
, and possibly more than once in [first2,last2)
).Exceptions
Throws if any element comparison (or pred) throws or if any of the operations on iterators throws.Note that invalid arguments cause undefined behavior.
——————————————————————————————————————————————————————————————————
//写的错误或者不好的地方请多多指导,可以在下面留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。
转载请注明出处:http://blog.csdn.net/qq844352155
author:天下无双
Email:coderguang@gmail.com
2014-9-12
于GDUT
——————————————————————————————————————————————————————————————————