cb29a_c++_STL_算法_查找算法_(2)search_n

cb29a_c++_STL_算法_查找算法_(2)search_n
//比如:连续查找连续的n个8
search_n(b,e,c,v),迭代器b,begin(),e,end().连续的c个v
pos=search_n(ideq.begin(), ideq.end(), 4, 3);

search_n(b,e,c,v,p) p,谓词参数,查找的规则(条件)
pos = search_n(ideq.begin(), ideq.end(), 3, 6, greater<int>());
greater<int>(),预定义函数对象。
自己做谓词,需要用二元谓词,就是两个参数的。

特别注意:
该算法的第二种形式应该是:
search_n_if(b,e,c,p)//实际不能使用,委员会审查,未发现,估计是bug.
pos=search_n_if(ideq.begin(),ideq.end(),3,bind2nd(greater<int>(),6));//实际不能使用
等效于
pos = search_n(ideq.begin(), ideq.end(), 3, 6, greater<int>());//这个可以。

distance算法
cout << "找到了连续的4个3: 当前位置:" << distance(ideq.begin(),pos)+1 << endl;

 1 /*cb29a_c++_STL_算法_查找算法_(2)search_n
 2 //比如:连续查找连续的n个8
 3 search_n(b,e,c,v),迭代器b,begin(),e,end().连续的c个v
 4 pos=search_n(ideq.begin(), ideq.end(), 4, 3);
 5 
 6 search_n(b,e,c,v,p) p,谓词参数,查找的规则(条件)
 7 pos = search_n(ideq.begin(), ideq.end(), 3, 6, greater<int>());
 8 greater<int>(),预定义函数对象。
 9 自己做谓词,需要用二元谓词,就是两个参数的。
10 
11 特别注意:
12 该算法的第二种形式应该是:
13 search_n_if(b,e,c,p)//实际不能使用,委员会审查,未发现,估计是bug.
14 pos=search_n_if(ideq.begin(),ideq.end(),3,bind2nd(greater<int>(),6));//实际不能使用
15 等效于
16 pos = search_n(ideq.begin(), ideq.end(), 3, 6, greater<int>());//这个可以。
17 
18 distance算法
19 cout << "找到了连续的4个3: 当前位置:" << distance(ideq.begin(),pos)+1 << endl;
20 */
21 
22 #include <iostream>
23 #include <algorithm>
24 #include <deque>
25 #include <functional>
26 
27 using namespace std;
28 
29 int main()
30 {
31     deque<int> ideq;
32     for (int i = 1; i <= 9; ++i)
33     {
34         if (i == 3)
35         {
36             ideq.push_back(i);
37             ideq.push_back(i);
38             ideq.push_back(i);
39             //ideq.push_back(i);
40         }
41         else
42             ideq.push_back(i);
43     }
44     for (deque<int>::iterator iter = ideq.begin(); iter != ideq.end(); ++iter)
45         cout << *iter << ' ';
46     cout << endl;
47 
48     deque<int>::iterator pos;
49     pos=search_n(ideq.begin(), ideq.end(), 4, 3);
50     if (pos != ideq.end())
51     {
52         cout << "找到了连续的4个3: 当前序号位置:" << distance(ideq.begin(),pos)+1 << endl;
53     }
54     else
55         cout << "没有找到" << endl;
56 
57     cout << "连续的3个大于的6的数" << endl;
58     pos = search_n(ideq.begin(), ideq.end(), 3, 6, greater<int>());
59     //pos = search_n_if(ideq.begin(), ideq.end(), 3, bind2nd(greater<int>(), 6));//错误//实际不能使用
60     if (pos != ideq.end())
61     {
62         cout << "连续的3个大于的6的数,当前序号位置:" << distance(ideq.begin(), pos) + 1 << endl;
63     }
64     else
65         cout << "没有找到" << endl;
66 
67     return 0;
68 }

 

posted @ 2020-02-19 15:10  txwtech  阅读(171)  评论(0编辑  收藏  举报