2014-01-09 22 views
5

Ich versuche, den Unterschied zwischen std::search und std::find_first_ofUnterschied zwischen std :: Suche und std :: find_first_of

Sie haben die gleichen Prototypen zu erfassen:

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); 

Sie beide dasselbe zurück: Ein Iterator zum ersten Auftreten der Sequenz [first2, last2) innerhalb [first1, last1]. (mit Gleichheit oder ein binäres Prädikat)

Was ist der Unterschied? Liege ich falsch ?

Antwort

8

Der Unterschied besteht darin, dass std::search sucht nach einer ganzen Reihe von Elementen innerhalb eines anderen Bereichs, während std::find_first_of sucht nach einem einzelnen Element aus einem Bereich in einen anderen Bereich.

5

std::find_first_of sucht nach einem der Elemente in Ihrem Suchbereich. Es wird einen Iterator zum ersten Vorkommen eines der Elemente in [s_first1, s_first2] zurückgeben.

std::search sucht nach der ganzen Sequenz, die Sie bestanden haben. So wird ein Iterator zum ersten Auftreten der Sequenz [s_first1, s_first2] zurückgegeben.

#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() Funde, wo der Bereich von Elementen, die die gesamte Sequenz von [first2..last2) einstimmt, während find_first_of() das erste Einzelelement, das in [first2..last2) eines der Elemente übereinstimmt findet.

Verwandte Themen