STL_算法_查找算法(findfind_if)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL_算法_查找算法(findfind_if)相关的知识,希望对你有一定的参考价值。
C++ Primer 学习中。
。。
简单记录下我的学习过程 (代码为主)
find 、 find_if
/**********************线性查找O(n) find(); find_if(); 注意: 1.假设是已序区间,能够使用区间查找算法 2.关联式容器(set,map)有等效的成员函数find();时间复杂度O(log(n)) 3.string 有等效的成员函数find(); **********************/ #include<iostream> #include<cstdio> #include<string> #include<vector> #include<set> #include<algorithm> #include<functional> using namespace std; /************************************************************************************* std::find algorithm -------------------------------------------------------------------------------------- template <class InputIterator, class T> InputIterator find ( InputIterator first, InputIterator last, const T& value ); eg: template<class InputIterator, class T> InputIterator find ( InputIterator first, InputIterator last, const T& value ) { for ( ;first!=last; first++) if ( *first==value ) break; return first; } **************************************************************************************/ /************************************************************************************* std::find_if algorithm -------------------------------------------------------------------------------------- template <class InputIterator, class Predicate> InputIterator find_if ( InputIterator first, InputIterator last, Predicate pred ); eg: template<class InputIterator, class Predicate> InputIterator find_if ( InputIterator first, InputIterator last, Predicate pred ) { for ( ; first!=last ; first++ ) if ( pred(*first) ) break; return first; } **************************************************************************************/ bool IsEven (int i); int main () { int myints[] = {10,30,20,40,20,10,30,40}; int * p; // pointer to array element: p = find(myints,myints+8,30); ++p; cout << "The element following 30 is " << *p << endl; vector<int> myvector (myints,myints+8); vector<int>::iterator it; // iterator to vector element: it = find (myvector.begin(), myvector.end(), 30); ++it; cout << "The element following 30 is " << *it << endl; //输出第一个30---第二个30区间内的数 vector<int>::iterator it2; it2=find (it,myvector.end(),30); while(it!=it2) cout<<*it++<<" "; cout<<endl; /**--------------------------------find_if()---------------------------------**/ //找第一个偶数 it = find_if (myvector.begin(), myvector.end(), IsEven);//函数 或 函数对象 cout << "The first odd value is " << *it << endl; it2 = find_if(myvector.begin(),myvector.end(), not1(bind2nd(modulus<int>(),2))); cout << "The first odd value is " << *it2 << endl; /**--------------------------------关联容器---------------------------------**/ set<int> s(myvector.begin(),myvector.begin()+4); cout<<"复杂度为O(log(n)),查找*s.find(40):= " << *s.find(40) << endl; /**---------------------------------string----------------------------------**/ string st("AngelaBaby"); string::size_type pos = st.find("Baby"); if(pos != string::npos) cout<<"find it!"<<endl; else cout<<"not find it!"<<endl; pos = st.find("baby"); if(pos != string::npos) cout<<"find it!"<<endl; else cout<<"not find it!"<<endl; return 0; } bool IsEven (int i) { return ((i%2)==0); } /****** Output: The element following 30 is 20 The element following 30 is 20 20 40 20 10 The first odd value is 10 The first odd value is 10 复杂度为O(log(n)),查找*s.find(40):= 40 find it! not find it! ******/
以上是关于STL_算法_查找算法(findfind_if)的主要内容,如果未能解决你的问题,请参考以下文章