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 }
欢迎讨论,相互学习。
cdtxw@foxmail.com