函式宣告:
template<class InputIterator, class T> inline
InputIterator find(InputIteratorFirst,//起始尋找位置InputIteratorLast,//終止尋找位置const T&Value//待尋找的值)
這個函數就是在Iterators range內執行線性尋找.如果找到一個適合的值,則返回該值的一個迭代器.否則返回終止尋找位置的迭代器.
一個簡單的例子:
vector<string> vecStr;vecStr.push_back( "我" );vecStr.push_back( "是" );vecStr.push_back( "一" );vecStr.push_back( "滴" );vecStr.push_back( "遠" );vecStr.push_back( "方" );vecStr.push_back( "孤" );vecStr.push_back( "心" );vector<string>::iterator iterFind = find( vecStr.begin(),vecStr.end(),"方" );if ( iterFind != vecStr.end() ){cout<<"value = "<<*iterFind<<endl;}else{cout<<"在vecStr.begin()-----vecStr.end()範圍內沒有尋找到相關記錄"<<endl;}system( "pause" );這個例子很簡單,vector裡面的是一個string("內建"類型),所謂內建內型可以理解成,編譯器能夠比較大小的原子類型.
其實在實際中用到上述內建類型很少.主要是一些自訂的類型,自訂的類型.(在C++裡面也可以說是類).
使用find時需要注意的問題是,必須要重載==運算子.
具體例子如下:
#include <iostream>#include <vector>#include <string>#include <algorithm>using namespace std;struct A{string strID;inti;A( string strID,int i ){this->strID = strID;this->i = i;}bool operator==( const A& a ){if ( a.strID == strID ){return true;}return false;}};typedef vector<A>::iterator vecIter;inline bool operator< ( const A& usrOne,const A& usrTwo ){if ( usrOne.strID < usrTwo.strID ){return true;}return false;}bool cpmVec( A a1,A a2 ){return a1.i > a2.i;}void main(){A a( "1",1 );vector<A> vecA;vecA.push_back( a );a.i = 2;a.strID = "2";vecA.push_back( a );a.i = 5;a.strID = "2";vecA.push_back( a );a.i = 4;a.strID = "1";vecA.push_back( a );a.i = 7;a.strID = "1";vecA.push_back( a );a.i = 9;a.strID = "1";vecA.push_back( a );stable_sort( vecA.begin(),vecA.end(),cpmVec );for ( vector<A>::iterator iterA = vecA.begin();iterA != vecA.end();iterA ++ ){cout<<"i = "<<iterA->i<<"strID = "<<iterA->strID<<endl;}a.strID = "1";a.i = 100;vecIter iterFind = find( vecA.begin(),vecA.end(),a );cout<<"i = "<<iterFind->i<<"strID = "<<iterFind->strID<<endl;system( "pause" );}好,這個函數搞定.