cb32a_c++_STL_算法_查找算法_(5)adjacent_find
cb32a_c++_STL_算法_查找算法_(5)adjacent_find
adjacent_find(b,e),b,begin(),e,end()
adjacent_find(b,e,p),p-parameter(谓词),函数,条件,规则.连续的两个符合条件的数据
adjacent_find() 算法可以用来搜索序列中两个连续相等的元素。
用 == 运算符来比较连续的一对元素,返回的迭代器指向前两个相等元素中的第一个。
如果没有一对相等的元素,这个算法返回这个序列的结束迭代器。
http://c.biancheng.net/view/576.html
如果是已序区间,可以使用已序区间的查找算法(效率高),比如:set和multiset_关联容器自动排序
binary_search()
includes()
lower_bound()
upper_bound()
*/
1 /*cb32a_c++_STL_算法_查找算法_(5)adjacent_find 2 adjacent_find(b,e),b,begin(),e,end() 3 adjacent_find(b,e,p),p-parameter(谓词),函数,条件,规则.连续的两个符合条件的数据 4 adjacent_find() 算法可以用来搜索序列中两个连续相等的元素。 5 用 == 运算符来比较连续的一对元素,返回的迭代器指向前两个相等元素中的第一个。 6 如果没有一对相等的元素,这个算法返回这个序列的结束迭代器。 7 8 http://c.biancheng.net/view/576.html 9 10 如果是已序区间,可以使用已序区间的查找算法(效率高),比如:set和multiset_关联容器自动排序 11 binary_search() 12 includes() 13 lower_bound() 14 upper_bound() 15 16 */ 17 #include <iostream> 18 #include <algorithm> 19 #include <vector> 20 21 using namespace std; 22 bool doubled(int elem1, int elem2) //返回值是bool,就是谓词 23 { 24 return elem1 * 2 == elem2; 25 } 26 27 int main() 28 { 29 vector<int> ivec; 30 ivec.push_back(1); 31 ivec.push_back(3); 32 ivec.push_back(3); 33 ivec.push_back(4); 34 ivec.push_back(8); 35 ivec.push_back(5); 36 ivec.push_back(0); 37 for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter) 38 cout << *iter << ' '; 39 cout << endl; 40 41 vector<int>::iterator pos; 42 pos = adjacent_find(ivec.begin(), ivec.end());//寻找两个连续相等的数 43 if (pos != ivec.end()) 44 cout << "找到了,位置是:" << distance(ivec.begin(), pos) + 1 << endl; 45 else 46 cout << "没有两个连续的相等的数" << endl; 47 48 pos = adjacent_find(ivec.begin(), ivec.end(), doubled);//doubled就是谓词 49 if (pos != ivec.end()) 50 cout << "找到了,符合doubled函数条件。位置是:" << distance(ivec.begin(), pos) + 1 << endl; 51 else 52 cout << "没有两个连续的符合doubled函数条件" << endl; 53 54 return 0; 55 }
欢迎讨论,相互学习。
cdtxw@foxmail.com