find() find_if()
#if 0
/*查找-find find_if(1)*/
#include<iostream>
#include<functional>
#include<algorithm>
#include<list>
using namespace std;
template<typename Container>
void print(const Container &c);//模板函数
int main()
{
list<int> a;
for(int i=0;i<10;++i)
a.insert(a.end(),i);
for(int j=0;j<10;++j)
a.insert(a.end(),j);
print(a);
//查找
list<int>::iterator xc1;
xc1=find(a.begin(),a.end(),6);//查找6
list<int>::iterator xc2;//查找第二个
if(xc2!=a.end())
{
xc2=find(++xc1,a.end(),6);//从找到第一个的地方开始找
}
if(xc1!=a.end()&&xc2!=a.end())
{
--xc1;
++xc2;
for(list<int>::iterator iter=xc1;iter!=xc2;++iter)
{
cout<<*iter<<" ";
}
cout<<endl;
}
return 0;
}
//display
template<typename Container>
void print(const Container &c)//模板函数
{
Container::const_iterator i=c.begin();
while(i!=c.end())
{
cout<<*i<<" ";
++i;
}
cout<<endl;
}
#endif
#if 0
/*find find_if(2)*/
#include<iostream>
#include<vector>
#include<functional>
#include<algorithm>
using namespace std;
template<typename Container>
void print(const Container &c);//模板函数
int main()
{
vector<int> a;
vector<int>::iterator xc1;
for(int i=1;i<=10;++i)
a.push_back(i);
print(a);
xc1=find_if(a.begin(),a.end(),bind2nd(greater<int>(),3));//大于3的第一个数
cout<<"number(>3):"<<*xc1<<endl;
xc1=find_if(a.begin(),a.end(),not1(bind2nd(modulus<int>(),3)));//3的倍数
cout<<"number(%3==0):"<<*xc1<<endl;
return 0;
}
//display
template<typename Container>
void print(const Container &c)//模板函数
{
Container::const_iterator i=c.begin();
while(i!=c.end())
{
cout<<*i<<" ";
++i;
}
cout<<endl;
}
#endif
使用成员函数
#if 0
#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
template<typename Container>
void print(const Container &c);//模板函数
int main()
{
set<int> a;
a.insert(45);
a.insert(32);
a.insert(23);
a.insert(4);
a.insert(25);
print(a);
set<int>::iterator xc;
xc=a.find(25);//成员函数
if(xc!=a.end())
{
cout<<"success(25):"<<*xc<<endl;
}
else
{
cout<<"failed!!!"<<endl;
}
return 0;
}
//display
template<typename Container>
void print(const Container &c)//模板函数
{
Container::const_iterator i=c.begin();
while(i!=c.end())
{
cout<<*i<<" ";
++i;
}
cout<<endl;
}
#endif
字符串查找
#if 0
/*字符串查找*/
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a("hellostring");
string::size_type xc=a.find("llo");
if(xc!=string::npos)
{
cout<<"success(index):"<<xc<<endl;
}
else
{
cout<<"failed!!!"<<endl;
}
return 0;
}
#endif
search_n()
#if 0
/*search_n*/
#include<iostream>
#include<deque>
#include<algorithm>
#include<functional>
using namespace std;
template<typename Container>
void print(const Container &c);//模板函数
int main()
{
deque<int> a;
for(int i=0;i<10;i++)
{
if(i==3)
{
a.push_back(i);
a.push_back(i);
a.push_back(i);
a.push_back(i);//插入4个3
}
else
a.push_back(i);//添加
}
print(a);
//查找search_n
deque<int>::iterator xc;
xc=search_n(a.begin(),a.end(),2,3);//查找连续的2个3
if(xc!=a.end())
{
cout<<"success(2,3):"<<*xc<<endl;//显示出第一个
cout<<"index:"<<distance(a.begin(),xc)<<endl;//显示下标
}
else
{
cout<<"failed!!!"<<endl;
}
xc=search_n(a.begin(),a.end(),3,6,greater<int>());//连续三个>6的数Yes(指定标准时遗漏的错误,但可以运行)
//xc=search_n_if(a.begin(),a.end(),3,bind2nd(greater<int>(),6));//标准写法No
if(xc!=a.end())
{
cout<<"success(>6,3):"<<*xc<<endl;
cout<<"index:"<<distance(a.begin(),xc+1)<<endl;
}
else
{
cout<<"failed!!!"<<endl;
}
return 0;
}
//display
template<typename Container>
void print(const Container &c)//模板函数
{
Container::const_iterator i=c.begin();
while(i!=c.end())
{
cout<<*i<<" ";
++i;
}
cout<<endl;
}
#endif
search find_end
#if 0
/*search find_end*/
#include<iostream>
#include<algorithm>
#include<deque>
#include<list>
using namespace std;
template<typename Container>
void print(const Container &c);//模板函数
int main()
{
//deque
deque<int> de;//定义
for(int i=0;i<8;++i)
de.insert(de.end(),i);//插入
for(int j=0;j<8;++j)
de.insert(de.end(),j);
for(int t=0;t<8;++t)
de.insert(de.end(),t);
cout<<"deque:"<<endl;
print(de);
//list
list<int> li;
for(int k=3;k<8;++k)
li.insert(li.end(),k);
cout<<"list:"<<endl;
print(li);
cout<<endl;
//search
deque<int>::iterator xcd;
xcd=search(de.begin(),de.end(),li.begin(),li.end());//在de中查找li
while(xcd!=de.end())//循环查找
{
cout<<"success:"<<*xcd<<endl;//找到的第一个数
cout<<"index:"<<distance(de.begin(),xcd)<<endl;//下标
cout<<endl;
++xcd;
xcd=search(xcd,de.end(),li.begin(),li.end());
}
/*if(xcd!=de.end())
{
cout<<"success:"<<*xcd<<endl;//找到的第一个数
cout<<"index(1):"<<distance(de.begin(),xcd)<<endl;//下标
}
else
{
cout<<"failed!!!"<<endl;
}
//继续查找后面的
cout<<endl;
++xcd;
xcd=search(xcd,de.end(),li.begin(),li.end());
if(xcd!=de.end())
{
cout<<"success:"<<*xcd<<endl;//找到的第二个数
cout<<"index(2):"<<distance(de.begin(),xcd)<<endl;//下标
}
else
{
cout<<"failed!!!"<<endl;
}*/
//find_end(查找最后一对)
xcd=find_end(de.begin(),de.end(),li.begin(),li.end());
if(xcd!=de.end())
{
cout<<"success:"<<*xcd<<endl;
cout<<"index:"<<distance(de.begin(),xcd)<<endl;//下标
}
return 0;
}
//display
template<typename Container>
void print(const Container &c)//模板函数
{
Container::const_iterator i=c.begin();
while(i!=c.end())
{
cout<<*i<<" ";
++i;
}
cout<<endl;
}
#endif
二元谓词
#if 0
/*二元谓词*/
#include<iostream>
#include<algorithm>
#include<vector>
#include<functional>
using namespace std;
template<typename Container>
void print(const Container &c);//模板函数
bool check(int elem,bool even);
int main()
{
vector<int> a;
for(int i=1;i<10;++i)
a.push_back(i);
print(a);
//search
bool checkVal[3]={false,true,false};//查找三个连续的奇数、偶数、奇数
vector<int>::iterator xc;
xc=search(a.begin(),a.end(),checkVal,checkVal+3,check);
if(xc!=a.end())
{
//cout<<"success:"<<*xc<<endl;
cout<<"index:"<<distance(a.begin(),xc)+1<<endl;
}
else
{
cout<<"failed!!!"<<endl;
}
return 0;
}
//display
template<typename Container>
void print(const Container &c)//模板函数
{
Container::const_iterator i=c.begin();
while(i!=c.end())
{
cout<<*i<<" ";
++i;
}
cout<<endl;
}
bool check(int elem,bool even)
{
if(even)
return elem%2==0;
else
return even%2==1;
}
#endif
find_first_of
#if 0
/*find_first_of*/
#include<iostream>
#include<algorithm>
#include<vector>
#include<list>
#include<string>
using namespace std;
template<typename Container>
void print(const Container &c);//模板函数
int main()
{
vector<int> ve;
list<int> li;
for(int i=1;i<12;++i)
ve.push_back(i);
li.push_back(3);
li.push_back(6);
li.push_back(9);
cout<<"vector:"<<endl;
print(ve);
cout<<"list:"<<endl;
print(li);
cout<<endl;
//查找,找到第一个就停下来了
vector<int>::iterator xc;
xc=find_first_of(ve.begin(),ve.end(),li.begin(),li.end());//在ve里查找li中的元素(&&),任意一个
if(xc!=ve.end())
{
cout<<"success:"<<*xc<<endl;
cout<<"index:"<<distance(ve.begin(),xc)<<endl;
}
else
{
cout<<"failed!!!"<<endl;
}
cout<<endl;
//查找最后一个,逆向迭代器
vector<int>::reverse_iterator rxc;
rxc=find_first_of(ve.rbegin(),ve.rend(),li.begin(),li.end());
if(rxc!=ve.rend())
{
cout<<"success:"<<*xc<<endl;
cout<<"index:"<<distance(ve.begin(),rxc.base())<<endl;//需要将逆向迭代器转换为正向迭代器
}
else
{
cout<<"failed!!!"<<endl;
}
cout<<endl;
//string find_first_of
string str("0123456789");
string str1("df45h7");
string::size_type xc1=str1.find_first_of(str);//查找数字
if(xc1!=string::npos)
{
cout<<"index:"<<xc1<<endl;
}
else
{
cout<<"failed!!!"<<endl;
}
//从后面查找
xc1=str.find_last_of(str);
if(xc1!=string::npos)
{
cout<<"index:"<<xc1<<endl;
}
else
{
cout<<"failed!!!"<<endl;
}
return 0;
}
//display
template<typename Container>
void print(const Container &c)//模板函数
{
Container::const_iterator i=c.begin();
while(i!=c.end())
{
cout<<*i<<" ";
++i;
}
cout<<endl;
}
#endif
adiacent_find
#if 0
/*adjacent_find*/
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
bool doubled(int elem1,int elem2);//谓词
template<typename Container>
void print(const Container &c);//模板函数
int main()
{
vector<int> a;
a.push_back(1);
a.push_back(3);
a.push_back(2);
a.push_back(4);
a.push_back(4);
a.push_back(6);
a.push_back(0);
cout<<"a:"<<endl;
print(a);
cout<<endl;
//adjacent查找
vector<int>::iterator xc;
xc=adjacent_find(a.begin(),a.end());//查找两个连续的相等的数
if(xc!=a.end())
{
cout<<"success(index):"<<distance(a.begin(),xc)+1<<endl;
}
else
{
cout<<"failed!!!"<<endl;
}
cout<<endl;
//使用谓词
xc=adjacent_find(a.begin(),a.end(),doubled);
if(xc!=a.end())
{
cout<<"success(index):"<<distance(a.begin(),xc)+1<<endl;
}
else
{
cout<<"failed!!!"<<endl;
}
return 0;
}
//display
template<typename Container>
void print(const Container &c)//模板函数
{
Container::const_iterator i=c.begin();
while(i!=c.end())
{
cout<<*i<<" ";
++i;
}
cout<<endl;
}
bool doubled(int elem1,int elem2)
{
return elem1*2==elem2;//第二个数是第一个数的两倍
}
#endif
lower_bound upper_bound equal_range
#if 0
/*lower_bound upper_bound equal_range*/
#include<iostream>
#include<algorithm>
#include<list>
using namespace std;
template<typename Container>
void print(const Container &c);//模板函数
int main()
{
list<int> li;
for(int i=1;i<10;++i)
li.insert(li.end(),i);
for(int j=1;j<10;++j)
li.insert(li.end(),j);
li.sort();//排序
print(li);
//lower_bound
list<int>::iterator xc1,xc2;
xc1=lower_bound(li.begin(),li.end(),5);//查找第一个5
if(xc1!=li.end())
cout<<"success(index):"<<distance(li.begin(),xc1)+1<<endl;//第一个5的位置
else
cout<<"failed!!!"<<endl;
cout<<endl;
xc2=upper_bound(li.begin(),li.end(),5);//查找大于最后一个5的第一个位置
if(xc2!=li.begin())
cout<<"success(index):"<<distance(li.begin(),xc2)+1<<endl;
else
cout<<"failed!!!"<<endl;
cout<<endl;
//insert
li.insert(lower_bound(li.begin(),li.end(),5),5);//insert 5
li.insert(upper_bound(li.begin(),li.end(),5),5);//5
print(li);
cout<<endl;
//equal_range
pair<list<int>::iterator,list<int>::iterator> range;
range=equal_range(li.begin(),li.end(),5);
cout<<"success(index1):"<<distance(li.begin(),range.first)+1<<endl;
cout<<"success(index2):"<<distance(li.begin(),range.second)+1<<endl;
cout<<endl;
return 0;
}
//display
template<typename Container>
void print(const Container &c)//模板函数
{
Container::const_iterator i=c.begin();
while(i!=c.end())
{
cout<<*i<<" ";
++i;
}
cout<<endl;
}
#endif