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);
|
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; }
例子:
可以看到,只要匹配到一个元素符号要求,就返回。
The elements in [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 in count1*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
——————————————————————————————————————————————————————————————————