2014-01-09 4 views
5

내가 std::search차이 :

그들은 같은 프로토 타입이 std::find_first_of 사이의 차이를 파악하기 위해 노력하고 find_first_of : 그들은 모두 같은 일을 반환

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

: 측정 iterator가 [first1, last1] 내부의 [first2, last2] 시퀀스의 첫 번째 항목에 적용됩니다. (평등 또는 2 진 조건 자 사용)

그래서 차이점은 무엇입니까? 내가 잘못 ?

답변

8

차이점은 다른 범위 내의 구성 요소의 전체 범위 대한 검색 std::search 반면, 다른 범위의 범위에서 단일 요소 std::find_first_of 검색한다.

5

std::find_first_of은 검색 범위의 요소 중 하나를 찾고 있습니다. [s_first1, s_first2]에있는 요소 중 첫 항목으로 반복기를 반환합니다.

std::search은 전달한 전체 시퀀스를 찾고 있습니다. 이 경우 반복자가 시퀀스 [s_first1, s_first2]의 첫 번째 항목으로 반환됩니다.

#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)의 요소 중 하나와 일치하는 상기 제 하나의 요소를 발견하는 동안, [first2..last2)의 전체 순서가 일치하는 요소의 범위.