簡単なプログラム解釈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つのプロトタイプがある.
関数のプロトタイプ:
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
********************************************************************************************************************************