/*
* The Find family
*
*/
template<class In, class T> In find(In first, In last, const T& val);
template<class In, class Pred> In find_if(In first, In last, Pred p);
template<class For, class For2>
For find_first_of(For first, For last, For2 first2, For2 last2);
template<class For, class For2, class BinPred>
For find_first_of(For first, For last, For2 first2, For2 last2, BinPred p);
template<class For> For adjacent_find(For first, For last);
template<class For, class BinPred> For adjacent_find(For first, For last, BinPred p);
/*
* Usage
*
*/
bool pred(int);
void f(vector<bool(*f)(int)>& v1, vector<int>& v2)
{
find(v1.begin(),v1.end(),pred); // find `pred'
find_if(v2.begin(),v2.end(),pred); // find int for which pred() returns true
}
int x[] = { 1,3,4 };
int y[] = { 0,2,3,4,5};
void f()
{
int* p = find_first_of(x,x+3,y,y+5); // p = &x[1]
int* q = find_first_of(p+1,x+3,y,y+5); // q = &x[2]
}
void f(vector<string>& text)
{
vector<string>::iterator p = adjacent_find(text.begin(),text.end());
if (p!=text.end() && *p=="the") { // I duplicated "the" again!
text.erase(p);
// ...
}
}