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


C++STLの非可変アルゴリズム(Non-mutating algorithms)は、操作データを破壊しないテンプレート関数のセットであり、シーケンスデータの個々の処理、要素検索、サブシーケンス検索、統計、マッチングを行うために使用される.
     for_eachは、反復器区間[first,last)が指す各要素に対して、単一パラメータ関数オブジェクトfによって定義された操作を実行するコンテナ要素を1つずつ巡回するために使用される.
プロトタイプ:
template
   Function for_each(
      InputIterator _First, 
      InputIterator _Last, 
      Function _Func
      );

説明:
        for_eachアルゴリズム範囲[first,last]の各要素は、関数Fを呼び出し、入力されたパラメータfを返します.この関数は、シーケンス内の要素を変更しません.
サンプルコード:
/*******************************************************************
 * Copyright (C) Jerry Jiang
 *               
 * File Name   : For_each.cpp
 * Author      : Jerry Jiang
 * Create      : 2011-9-27 19:46:44
 * Mail        : [email protected]
 * Blog        : http://blog.csdn.net/jerryjbiao 
 *               
 * Description :        C++ STL                  
 *		       :          for_each
 *               
 ******************************************************************/

#include 
#include 
#include 

using namespace std;

//print    
struct print{
	int count;
	print(){count = 0;}
	void operator()(int x)
	{
		cout << x << endl;
		++count;
	}
};

int main(void)
{
	list ilist;
	//   
	for ( size_t i = 1; i < 10; ++i)
	{
		ilist.push_back(i);
	}
	//  ilist     
	print p = for_each(ilist.begin(), ilist.end(), print());
	//  ilist    
	cout << p.count << endl;

	return 0;
}

例:
擬似関数は、関数オブジェクトとも呼ばれ、STL(標準テンプレートライブラリ)の6つのコンポーネント(コンテナ、コンフィギュレータ、反復器、アルゴリズム、アダプタ、擬似関数)の1つです.シミュレーション関数は小さいが、アルゴリズムの機能を大きく拡張し、ほとんどのアルゴリズムにシミュレーション関数バージョンがある.たとえば、検索アルゴリズムfind_ifはfindアルゴリズムの拡張であり、標準的な検索は2つの要素方向などで見つかったが、何が等しいかは異なる場合に異なる定義が必要であり、例えば住所が等しい、住所と郵便番号が等しい、これらの等しい定義は変わっているが、アルゴリズム自体は変える必要はない.これはシミュレーション関数のおかげである.シミュレーション関数を関数オブジェクトと呼ぶのは,シミュレーション関数が()関数演算オペレータを定義したクラスであるからである. 
シミュレーション関数に関する参考文書:
1、アナログ関数の使用要領
2、模倣関数とは何か
3、C++擬似関数(functor)
 
 
*******************************************************************************************************************************
C++経典書目索引及び資源ダウンロード:http://blog.csdn.net/jerryjbiao/article/details/7358796
********************************************************************************************************************************