簡単なプログラム解釈C++STLアルゴリズムシリーズの3:find_if


C++STLの非可変アルゴリズム(Non-mutating algorithms)は、操作データを破壊しないテンプレート関数のセットであり、シーケンスデータの個々の処理、要素検索、サブシーケンス検索、統計、マッチングを行うために使用される.
     find_ifアルゴリズムはfindの述語判断バージョンであり、ブール値を返す述語判断predを利用して、反復器区間[first,last)上の各要素を検査し、反復器iterがpred(*iter)==trueを満たし、要素が見つかり、反復器値iterが見つからない場合、lastを返す.
関数のプロトタイプ:
template<class InputIterator, class Predicate>
   InputIterator find_if(
      InputIterator _First, 
      InputIterator _Last, 
      Predicate _Pred
   );

サンプルコード:
/*******************************************************************
 * Copyright (C) Jerry Jiang              
 * File Name   : find_if.cpp
 * Author      : Jerry Jiang
 * Create Time : 2011-9-29 22:21:29
 * Mail        : [email protected]
 * Blog        : http://blog.csdn.net/jerryjbiao               
 * Description :        C++ STL                    
 *                     :         find_if               
 ******************************************************************/

#include <algorithm>
#include <vector>
#include <iostream>

using namespace std;

//       divbyfive :   x   5  
bool divbyfive(int x)
{
	return x % 5 ? 0 : 1;
}

int main()
{
	//  vector
	vector<int> iVect(20);
	for(size_t i = 0; i < iVect.size(); ++i)
	{
		iVect[i] = (i+1) * (i+3);
	}

	vector<int>::iterator iLocation;
	iLocation = find_if(iVect.begin(), iVect.end(), divbyfive);

	if (iLocation != iVect.end())
	{
		cout << "     5      :"
			 << *iLocation << endl					//    :15				
			 << "        :"
			 << iLocation - iVect.begin() << endl;  //      :2
	}
	
	return 0;
}

*******************************************************************************************************************************
C++経典書目索引及び資源ダウンロード:http://blog.csdn.net/jerryjbiao/article/details/7358796
********************************************************************************************************************************