C++ Primer 学习中。。。
简单记录下我的学习过程 (代码为主)
全部容器适用(O(log(n))) 已序区间查找算法
binary_search //二分查找。返回bool值,
includes //包括查找,返回bool值。
#include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<algorithm> using namespace std; /***************************************** //全部容器适用(O(log(n))) 已序区间查找算法 binary_search() //二分查找。返回bool值, includes() //包括查找,返回bool值。 *****************************************/ /************************************************************************************* std::binary_search 全部排序容器适用 algorithm -------------------------------------------------------------------------------------- template <class ForwardIterator, class T> bool binary_search ( ForwardIterator first, ForwardIterator last, const T& value ); template <class ForwardIterator, class T, class Compare> bool binary_search ( ForwardIterator first, ForwardIterator last, const T& value, Compare comp ); //eg: template <class ForwardIterator, class T> bool binary_search ( ForwardIterator first, ForwardIterator last, const T& value ) { first = lower_bound(first,last,value); return (first!=last && !(value<*first)); } *************************************************************************************/ /************************************************************************************* std::includes 全部排序容器适用 algorithm -------------------------------------------------------------------------------------- template <class InputIterator1, class InputIterator2> bool includes ( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2 ); template <class InputIterator1, class InputIterator2, class Compare> bool includes ( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Compare comp ); //eg: template <class InputIterator1, class InputIterator2> bool includes ( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2 ) { while (first1!=last1) { if (*first2<*first1) break; else if (*first1<*first2) ++first1; else { ++first1; ++first2; } if (first2==last2) return true; } return false; } *************************************************************************************/ bool myfunction (int i,int j) { return (i<j);} int main() { int myints[] = {1,2,3,4,5,4,3,2,1}; vector<int> v(myints,myints+9); // 1 2 3 4 5 4 3 2 1 // using default comparison: sort (v.begin(), v.end()); cout << "looking for a 3... "; if (binary_search (v.begin(), v.end(), 3)) cout << "found! "; else cout << "not found. "; // using myfunction as comp: sort (v.begin(), v.end(), myfunction); cout << "looking for a 6... "; if (binary_search (v.begin(), v.end(), 6, myfunction)) cout << "found! "; else cout << "not found. "; cout<<endl; /**----------------------------------------------------------------------------------**/ int container[] = {5,15,10,25,20,35,30,50,45,40}; int continent[] = {40,30,20,10}; sort (container,container+10); sort (continent,continent+4); // using default comparison: if ( includes(container,container+10,continent,continent+4) ) cout << "container includes continent!" << endl; // using myfunction as comp: if ( includes(container,container+10,continent,continent+4, myfunction) ) cout << "container includes continent!" << endl; return 0; } /***** Output looking for a 3... found! looking for a 6... not found. container includes continent! container includes continent! */