程序员人生 网站导航

STL algorithm算法search,search_n(52)

栏目:互联网时间:2014-10-08 08:00:01

search原型:

std::search

equality (1)
template <class ForwardIterator1, class ForwardIterator2> ForwardIterator1 search (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2);
predicate (2)
template <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> ForwardIterator1 search (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred);
该函数是查找[first2,last2)第一次出现在[first1,last1)中的位置。

也就相当于一个子序列在一个序列中第一次出现的位置。

若匹配成功,返回[first1,last1)中匹配的第一个相应元素。

否则,返回last1.

行为类似于:

template<class ForwardIterator1, class ForwardIterator2> ForwardIterator1 search ( ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2) { if (first2==last2) return first1; // specified in C++11 while (first1!=last1) { ForwardIterator1 it1 = first1; ForwardIterator2 it2 = first2; while (*it1==*it2) { // or: while (pred(*it1,*it2)) for version 2 ++it1; ++it2; if (it2==last2) return first1; if (it1==last1) return last1; } ++first1; } return last1; }

一个简单的例子:

#include <iostream> #include <algorithm> #include <vector> using namespace std; void msearch(){ char vc[]={"iamastudentstuden"}; char vt[]={"student"}; auto it=search(vc,vc+17,vt,vt+7); cout<<"auto it=search(vc,vc+17,vt,vt+7);;"<<endl; for(auto i=it;i!=vc+17;++i) cout<<*i; cout<<endl; }
运行截图:





search_n原型:

std::search_n

equality (1)
template <class ForwardIterator, class Size, class T> ForwardIterator search_n (ForwardIterator first, ForwardIterator last, Size count, const T& val);
predicate (2)
template <class ForwardIterator, class Size, class T, class BinaryPredicate> ForwardIterator search_n ( ForwardIterator first, ForwardIterator last, Size count, const T& val, BinaryPredicate pred );
该函数是查找序列中连续count个val值第一次出现的位置。

如果有,则返回第一次出现的首元素,否则返回last。

其行为类似于:

template<class ForwardIterator, class Size, class T> ForwardIterator search_n (ForwardIterator first, ForwardIterator last, Size count, const T& val) { ForwardIterator it, limit; Size i; limit=first; std::advance(limit,std::distance(first,last)-count); while (first!=limit) { it = first; i=0; while (*it==val) // or: while (pred(*it,val)) for the pred version { ++it; if (++i==count) return first; } ++first; } return last; }
一个简单的例子:

#include <iostream> #include <algorithm> #include <vector> using namespace std; bool mypredicate (int i, int j) { return (i==j); } void msearchn(){ int myints[]={10,20,30,30,20,10,10,20}; std::vector<int> myvector (myints,myints+8); std::vector<int>::iterator it; // using default comparison: it = std::search_n (myvector.begin(), myvector.end(), 2, 30); if (it!=myvector.end()) std::cout << "two 30s found at position " << (it-myvector.begin()) << ' '; else std::cout << "match not found "; // using predicate comparison: it = std::search_n (myvector.begin(), myvector.end(), 2, 10, mypredicate); if (it!=myvector.end()) std::cout << "two 10s found at position " << int(it-myvector.begin()) << ' '; else std::cout << "match not found "; }
运行截图:






――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

//写的错误或者不好的地方请多多指导,可以在下面留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。

转载请注明出处:http://blog.csdn.net/qq844352155

author:天下无双

Email:coderguang@gmail.com

2014-9-26

于GDUT

――――――――――――――――――――――――――――――――――――――――――――――――――






------分隔线----------------------------
------分隔线----------------------------

最新技术推荐