STL学习之find系列函数
这里先介绍find, find_if, find_first_of,三个函数。其余的以后再更新。

一、std::find()

用法:find(first, end, value);

返回区间[first,end)中第一个值等于value的元素位置;若未找到,返回end。函数返回的是迭代器或指针,即位置信息。

参考代码main(),查找findvalue的值

二、std::find_if()

用法:find_if(first, end, bool pred);

返回区间[first,end)中使一元判断式pred为true的第一个元素位置;若未找到,返回end。

参考代码main(),test_find_if();查找第一个被5整除的数,pred写成bool函数

三、std::find_first_of()

用法:find_first_of(first1, end1, first2, end2);

返回第一个区间迭代器位置,满足第一个区间[first1,end1)中的元素第一次出现在第二个区间[first2,end2)中。

通俗就是说顺序从第一个区间[first1,end1)中取一个元素,在第二个区间中找有没有相同的元素,如果有就返回第一个区间中元素位置;未找到则继续

用第一个区间的下一个元素在第二个区间找。

因此只要保证两个区间内的元素可以==即可,不用管装元素的容器形式。下面的例子我第一个区间用的vector、而第二个区间是list也是可以的。

参考代码main(),test_find_first_of();查找vector中第一次出现在list的元素。

代码示例:

复制代码
1 bool divbyfive(int x)
2 {
3 return x%5 ? 0 : 1;
4 }
5
6 void test_find_if(vector<int> vec)
7 {
8 vector<int>::iterator vec_it;
9 vec_it=find_if(vec.begin(),vec.end(),divbyfive);
10 if (vec_it!=vec.end())
11 {
12 cout<<"满足判断函数的数为: "<<vec_it<<"位置在"<<vec_it-vec.begin()<<endl;
13 }
14 else
15 {cout<<"未找到满足判断函数的数"<<endl;
16 }
17 return;
18 }
19
20 void test_find_first_of(vector<int> vec)
21 {
22 list<int> list2;
23 for (int i=20;i>5;i--)
24 {
25 list2.push_back(i);
26 }
27 vector<int>::iterator vec_it;
28 vec_it=find_first_of(vec.begin(),vec.end(),list2.begin(),list2.end());
29 if (vec_it!=vec.end())
30 {
31 cout<<"第一次出现在第二个容器的元素为: "<<</int></int></int>
vec_it<<"位置在: "<<vec_it-vec.begin()<<endl;
32 }
33 else
34 {
35 cout<<"两个容器没有相同元素"<<endl;
36 }
37 }
38
39 int main()
40 {
41 vector<int> vec;
42 int findvalue=11;
43 for (int i=1;i<11;i++)
44 {
45 vec.push_back(i);
46 }
47 vector<int>::iterator vec_it;
48 vec_it=find(vec.begin(),vec.end(),findvalue);
49 if (vec_it!=vec.end())
50 {
51 cout<<findvalue<<" position is "<<distance(vec.begin(),vec_it)<<endl;
52 }
53 else
54 cout<<findvalue<<"is not found"<<endl;
55
56 test_find_if(vec);
57 test_find_first_of(vec);
58 return 0;
59 }
复制代码</int></int></int></int>