ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [36] - find, search, reverse iterators
    Graphics 2021. 8. 10. 12:45

     다양한 Overloaded Functions가 존재합니다. 가장 단순한 함수는 Container의 특정 범위 내에서 value의 값을 찾아서 해당 iterator를 반환하는 첫 번째 함수입니다. 그 왜에더 Unary Predicate가지 지원하는 모습을 확인할 수 있습니다. 반환형이 iterator라는 점을 염두에 두고 간단하게 활용하며 몸에 익힙니다.

    완전히 일치하지 않는 단어는 찾아주지 못합니다. 예를 들어서 Acht의 'ch'만 입력해서는 찾아주지 못한다는 뜻입니다. 그런 함수가 있는 한편 std::find_first_of라는 함수는 일정 범위 안의 Container에서 다른 Container의 범위에 존재하는 요소가 가장 먼저 발견되면 해당 iterator를 반환합니다.

    x의 Delimiter 중 가장 먼저 나타나는 것은 [ , ]이기 때문에 O n e , 즉 3의 index를 출력할 것입니다.

    Comma를 Delimiter에서 제거하면 세미콜론을 찾아 나설 것입니다. 이를 응용하면 어떤 데이터를 받았을 때, 지정된 Delimiter를 바탕으로 문자를 Split하는 함수를 구현할 수 있습니다.

    std::search

    이 함수가 가장 통념적 탐색에 가까운 함수일 것입니다. 아래의 정보를 읽어보면 크게 두 가지의 종류로 나뉜다는 것을 알 수 있는데 하나는 == operator를 사용하고 다른 하나는 Binary Predicate를 사용한다는 것입니다. 두 개의 Container를 요구합니다. 하나는 탐색을 진행할 대상인 Container이고 다른 하나는 비교의 대상이 될 Container입니다. 특히, std::search의 경우엔 'Sequence of'라는 말을 사용하기 때문에 이전과 다르게 완전히 같지 않아도 Container의 일부에 해당 값이 존재한다면 찾은 것으로 간주합니다.

    가장 먼저 마주치는 것부터 결과로 출력하는 모습을 확인할 수 있습니다. 그런데 overloaded 된 5번 째 함수를 보면 Searcher라는 개념이 등장합니다. 그리고 받는 Parameter에 기준이 되는 Container가 없어진 것을 확인할 수 있는데 이는 단순히 특별한 탐색 알고리즘을 사용할 수 있다는 사실을 암시합니다.  Standard Library가 제공하는 다음과 같은 탐색 알고리즘들이 있습니다.

    기본 탐색은 추가적인 pre-processing이나 메모리를 요구하지는 않지만 자료의 양에 비례하여 시간을 잡아먹고 보이어의 알고리즘들은 추가적인 메모리를 잡아먹게 되나 기본 탐색보다는 빠르게 동작합니다. 이 함수들의 활용은 cppreference에 친절하게 설명이 되어 있습니다. 세 함수 모두 탐색의 기준이 되는 Container의 Range를 요구합니다.

    std::search와 반대로 동작하는 함수가 std::find_end인데 search가 첫 번째로 마주치는 연속적인 무언가를 찾아냈다면 find_end는 반대로 마지막에 마주치는 연속적인 무언가를 찾아냅니다. 하지만 search를 사용하면서 완전히 같은 효과를 구현할 수가 있습니다. haystack(탐색의 대상이 되는 Container)과 needle(탐색의 기준이 되는 Container)의 iterator를 반대로 집어넣으면 됩니다. haystack.begin() -> haystack.rbegin(), end() -> rend() 가 있기 때문에 모두 거꾸로 탐색하도록 집어 넣으면 마지막에 마주치는 연속된 데이터를 찾는데 용이합니다.  이 밖에 std::adjacent_find라든가 하는 흥미로운 함수들이 있었지만 대체로 쓸 일도 없을 것 같고 Critical한 요소가 아닌 것 같습니다. 있다는 것만 알아두고 필요할 때 찾아보면 될 것 같습니다.

    'Graphics' 카테고리의 다른 글

    [38] - Permuters  (0) 2021.08.10
    [37] - Generators  (0) 2021.08.10
    [35] - count, all, none_of  (0) 2021.08.09
    [34] - Transform, For_each  (0) 2021.08.09
    [33] - Remove_if  (0) 2021.08.09
Designed by Tistory.