簡単なプログラム解釈C++STLアルゴリズムシリーズの一つ:for_each
2404 ワード
C++STLの非可変アルゴリズム(Non-mutating algorithms)は、操作データを破壊しないテンプレート関数のセットであり、シーケンスデータの個々の処理、要素検索、サブシーケンス検索、統計、マッチングを行うために使用される.
for_eachは、反復器区間[first,last)が指す各要素に対して、単一パラメータ関数オブジェクトfによって定義された操作を実行するコンテナ要素を1つずつ巡回するために使用される.
プロトタイプ:
説明:
for_eachアルゴリズム範囲[first,last]の各要素は、関数Fを呼び出し、入力されたパラメータfを返します.この関数は、シーケンス内の要素を変更しません.
サンプルコード:
例:
擬似関数は、関数オブジェクトとも呼ばれ、STL(標準テンプレートライブラリ)の6つのコンポーネント(コンテナ、コンフィギュレータ、反復器、アルゴリズム、アダプタ、擬似関数)の1つです.シミュレーション関数は小さいが、アルゴリズムの機能を大きく拡張し、ほとんどのアルゴリズムにシミュレーション関数バージョンがある.たとえば、検索アルゴリズムfind_ifはfindアルゴリズムの拡張であり、標準的な検索は2つの要素方向などで見つかったが、何が等しいかは異なる場合に異なる定義が必要であり、例えば住所が等しい、住所と郵便番号が等しい、これらの等しい定義は変わっているが、アルゴリズム自体は変える必要はない.これはシミュレーション関数のおかげである.シミュレーション関数を関数オブジェクトと呼ぶのは,シミュレーション関数が()関数演算オペレータを定義したクラスであるからである.
シミュレーション関数に関する参考文書:
1、アナログ関数の使用要領
2、模倣関数とは何か
3、C++擬似関数(functor)
*******************************************************************************************************************************
C++経典書目索引及び資源ダウンロード:http://blog.csdn.net/jerryjbiao/article/details/7358796
********************************************************************************************************************************
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
********************************************************************************************************************************