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

3136 ワード

C++STLの非可変アルゴリズム(Non-mutating algorithms)は、操作データを破壊しないテンプレート関数のセットであり、シーケンスデータの個々の処理、要素検索、サブシーケンス検索、統計、マッチングを行うために使用される.
       find_endアルゴリズムは、あるシーケンスの中で最後の別のシーケンスと一致するサブシーケンスを検索する.反復器区間[first 1,last 1)で反復器区間[first 2,last 2)要素と一致するサブシーケンスを検索し、最初の要素の反復器またはlast 1を返す2つの関数プロトタイプがある.
関数のプロトタイプ:
template<class ForwardIterator1, class ForwardIterator2>
   ForwardIterator1 find_end(
      ForwardIterator1 _First1, 
      ForwardIterator1 _Last1,
      ForwardIterator2 _First2, 
      ForwardIterator2 _Last2
   );
template<class ForwardIterator1, class ForwardIterator2, class Pr>
   ForwardIterator1 find_end(
      ForwardIterator1 _First1, 
      ForwardIterator1 _Last1,
      ForwardIterator2 _First2, 
      ForwardIterator2 _Last2,
      BinaryPredicate _Comp
   );
 

サンプル・プログラム:
/*******************************************************************
 * Copyright (C) Jerry Jiang           
 * File Name   : find_end.cpp
 * Author      : Jerry Jiang
 * Create Time : 2011-10-12 20:07:20
 * Mail        : [email protected]
 * Blog        : http://blog.csdn.net/jerryjbiao             
 * Description :         C++ STL                        
 *                      :           find_end             
 ******************************************************************/

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

using namespace std;

int main()
{
	vector<int> v1;
	v1.push_back(5);
	v1.push_back(-2);
	v1.push_back(4);
	v1.push_back(3);
	v1.push_back(-2);
	v1.push_back(4);
	v1.push_back(8);
	v1.push_back(-2);
	v1.push_back(4);
	v1.push_back(9);

	vector<int>::const_iterator iter;
	cout << "v1: " ;
	for (iter = v1.begin(); iter != v1.end(); ++iter)
	{
		cout << *iter << "  ";
	}
	cout << endl;

	vector<int> v2;
	v2.push_back(-2);
	v2.push_back(4);

	cout << "v2: " ;
	for (iter = v2.begin(); iter != v2.end(); ++iter)
	{
		cout << *iter << "  ";
	}
	cout << endl;

	vector<int>::iterator iLoaction;
	iLoaction = find_end(v1.begin(), v1.end(), v2.begin(), v2.end());

	if (iLoaction != v1.end())
	{
		cout << "v1         V2    ,     :"
			 << "v1[" << iLoaction - v1.begin() << "]" << endl;
	}

	return 0;
}

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