簡単なプログラム解釈C++STLアルゴリズムシリーズの九:equal
C++STLの非可変アルゴリズム(Non-mutating algorithms)は、操作データを破壊しないテンプレート関数のセットであり、シーケンスデータの個々の処理、要素検索、サブシーケンス検索、統計、マッチングを行うために使用される.
equalアルゴリズムはmismatchに類似しており、equalアルゴリズムも2つのシーケンスの要素が等しいかどうかを逐一比較しているが、equal関数の戻り値はbool値true/falseであり、反復器値ではない.反復器区間[first 1,last 1)と反復器区間[first 2,first 2+(last 1−first 1))の要素が等しい(または二元述語判定条件binary_predを満たす)場合、trueを返し、そうでない場合falseを返す2つのプロトタイプがある.
関数のプロトタイプ:
サンプル・プログラム:
2元述語判定条件absEqualを用いて,2つのvectorベクトルコンテナの要素の平均絶対値が等しいと判定した.
*******************************************************************************************************************************
C++経典書目索引及び資源ダウンロード:http://blog.csdn.net/jerryjbiao/article/details/7358796
********************************************************************************************************************************
equalアルゴリズムはmismatchに類似しており、equalアルゴリズムも2つのシーケンスの要素が等しいかどうかを逐一比較しているが、equal関数の戻り値はbool値true/falseであり、反復器値ではない.反復器区間[first 1,last 1)と反復器区間[first 2,first 2+(last 1−first 1))の要素が等しい(または二元述語判定条件binary_predを満たす)場合、trueを返し、そうでない場合falseを返す2つのプロトタイプがある.
関数のプロトタイプ:
template<class InputIterator1, class InputIterator2>
bool equal(
InputIterator1 _First1,
InputIterator1 _Last1,
InputIterator2 _First2
);
template<class InputIterator1, class InputIterator2, class BinaryPredicate>
bool equal(
InputIterator1 _First1,
InputIterator1 _Last1,
InputIterator2 _First2,
BinaryPredicate _Comp
);
サンプル・プログラム:
2元述語判定条件absEqualを用いて,2つのvectorベクトルコンテナの要素の平均絶対値が等しいと判定した.
/*******************************************************************
* Copyright (C) Jerry Jiang
* File Name : equal.cpp
* Author : Jerry Jiang
* Create Time : 2011-10-10 22:51:07
* Mail : [email protected]
* Blog : http://blog.csdn.net/jerryjbiao
* Description : C++ STL
* : equal
******************************************************************/
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
bool absEqual(int a, int b)
{
return (a == abs(b) || b == abs(a)) ? true : false;
}
int main()
{
vector<int> ivect1(5);
vector<int> ivect2(5);
for (vector<int>::size_type i = 0; i < ivect1.size(); ++i)
{
ivect1[i] = i;
ivect2[i] = (-1) * i;
}
if ( equal( ivect1.begin(), ivect1.end(), ivect2.begin(), absEqual ) )
{
cout << "ivect1 ivect2 " << endl;
}
else
{
cout << "ivect1 ivect2 " << endl;
}
return 0;
}
*******************************************************************************************************************************
C++経典書目索引及び資源ダウンロード:http://blog.csdn.net/jerryjbiao/article/details/7358796
********************************************************************************************************************************