2014-01-09 3 views
5

find_first_of私は、彼らが同じプロトタイプを持つstd::searchstd::find_first_of違い::検索とstd ::

の違いを把握しようとしています:

template <class ForwardIterator1, class ForwardIterator2> 
    ForwardIterator1 find_first_of (ForwardIterator1 first1, ForwardIterator1 last1, 
            ForwardIterator2 first2, ForwardIterator2 last2); 

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

template <class ForwardIterator1, class ForwardIterator2> 
    ForwardIterator1 search (ForwardIterator1 first1, ForwardIterator1 last1, 
          ForwardIterator2 first2, ForwardIterator2 last2); 

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

彼らの両方が同じものを返します。 [first1、last1)内のシーケンス[first2、last2)の最初の出現までのイテレータ。 (等価、または2項述語を使用)

違いは何ですか?私が間違っている ?別の範囲の範囲から単一要素のstd::find_first_of検索ながら

答えて

8

差が、別の範囲内の要素の全範囲ためstd::search検索することです。

5

std::find_first_ofは、検索範囲内の要素のいずれかを探しています。 [s_first1, s_first2]のいずれかの要素の最初の出現にイテレータを返します。

std::searchは、渡した配列全体を検索しています。このようにして、イテレータをシーケンス[s_first1, s_first2]の最初の出現に戻します。要素の範囲が[first2..last2)の全配列と一致

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

int main() { 
    std::vector<int> A{1, 2, 3, 2, 4, 6, 5}; 
    std::vector<int> search_range{2, 4, 6}; 
    std::vector<int> find_first_of_range{6, 5}; 

    auto it_search = std::search(A.begin(), A.end(), 
     search_range.begin(), search_range.end()); 
    std::cout << std::distance(A.begin(), it_search) << std::endl; // 3 

    auto it_find_first_of = std::find_first_of(A.begin(), A.end(), 
     find_first_of_range.begin(), find_first_of_range.end()); 
    std::cout << std::distance(A.begin(), it_find_first_of) << std::endl; // 5 
} 

Runnable on Coliru.

2

std::search()発見find_first_of()[first2..last2)の要素のいずれかと一致する最初の単一の要素を発見しながら、です。

関連する問題