find_end

[機能]

  first1 から last1 で指定した範囲で,first2 から last2 に含まれるいずれかの要素(上の形式),または,二項関数オブジェクトで指定した意味で等しいいずれかの要素(下の形式)が最後に表れた位置を返します.

[形式]
	#include <algorithm>
	#include <functional>

	template <class ForwardIterator1, class ForwardIterator2> Forwarditerator1 find_end(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2);
	template <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate pred> Forwarditerator1 find_end(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred);
		

[使用例]

  1. find_of_first と find_end の使用方法です.
    #include <stdio.h>
    #include <math.h>
    #include <vector>
    #include <algorithm>
    #include <functional>
    using namespace std;
    					// 誤差の範囲で同じか否かのチェック
    class Equal : public binary_function<double, double, bool>
    {
    	public:
    		result_type operator() (first_argument_type a, second_argument_type b)
    		{
    			return (result_type)((fabs(a-b) < 0.1) ? 1 : 0);
    		}
    };
    
    int main()
    {
    	vector<double> v1, v2, v3;
    	vector<double>::iterator it;
    					// 初期設定
    	printf("**初期状態 v1**\n");
    	v1.push_back(3.5);
    	v1.push_back(5.01);
    	v1.push_back(4.0);
    	v1.push_back(4.95);
    	v1.push_back(4.05);
    	for (it = v1.begin(); it != v1.end(); it++)
    		printf("  %f", *it);
    	printf("\n");
    
    	printf("**初期状態 v2**\n");
    	v2.push_back(5.0);
    	v2.push_back(7.0);
    	for (it = v2.begin(); it != v2.end(); it++)
    		printf("  %f", *it);
    	printf("\n");
    
    	printf("**初期状態 v3**\n");
    	v3.push_back(5.0);
    	v3.push_back(4.0);
    	for (it = v3.begin(); it != v3.end(); it++)
    		printf("  %f", *it);
    	printf("\n");
    					// 検索
    	it = find_first_of(v1.begin(), v1.end(), v2.begin(), v2.end(), Equal());
    	if (it != v1.end())
    		printf("%f が見つかりました\n", *it);
    	else
    		printf("見つかりませんでした\n");
    
    	it = find_end(v1.begin(), v1.end(), v3.begin(), v3.end(), Equal());
    	if (it != v1.end())
    		printf("%f が見つかりました\n", *it);
    	else
    		printf("見つかりませんでした\n");
    
    	return 0;
    }
    			
    (出力)
    **初期状態 v1**
      3.500000  5.010000  4.000000  4.950000  4.050000
    **初期状態 v2**
      5.000000  7.000000
    **初期状態 v3**
      5.000000  4.000000
    5.010000 が見つかりました
    4.950000 が見つかりました
    			
[参照]

adjacent_findfindfind_first_offind_ifsearchsearch_n

菅沼ホーム 本文目次 演習問題解答例 付録目次 索引