C++ 일련하는 원소 찾기 Search

Notepad96

·

2020. 11. 13. 21:34

300x250

 

 

 

1. search, search_n

 

searchsearch_n 함수들은 algorithm 라이브러리의 포함되어 있다.

 

 

search는 원소 중 특정 값들이 일렬로 존재하고 있는지, 존재하고 있다면 어느 위치에 존재하는지를 찾아낼 수 있다.

 

 

 

 

search_n의 경우 지정한 수가 n번 연속으로 존재하는 지를 판별할 수 있다.

 

 

 

 

 


2. 코 드

환경 : Visual studio 2019

#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

int main() {
    vector<int> v;
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);
    v.push_back(6);
    v.push_back(7);
    v.push_back(1);
    v.push_back(1);
    v.push_back(1);
    
    cout << "vector : ";
    for (int n : v) {
        cout << n << " ";
    }
    cout << "\nindex  : ";
    for (int n = 0; n < v.size(); n++) {
        cout << n << " ";
    }
    cout << "\n==========================\n";



    vector<int> v2 = { 5, 7 };
    cout << "{ ";
    for (int n : v2) {
        cout << n << " ";
    }
    cout << "} ";
    auto it = search(v.begin(), v.end(), v2.begin(), v2.end());
    if (it != v.end()) {
        cout << it-v.begin() << "에 위치한다.\n";
    }
    else {
        cout << "는 존재하지 않습니다.\n";
    }
    cout << "\n==========================\n";



    v2 = { 5, 6, 7 };
    cout << "{ ";
    for (int n : v2) {
        cout << n << " ";
    }
    cout << "} ";
    it = search(v.begin(), v.end(), v2.begin(), v2.end());
    if (it != v.end()) {
        cout << it - v.begin() << "에 위치한다.\n";
    }
    else {
        cout << "는 존재하지 않습니다.\n";
    }
    cout << "\n==========================\n";



    int num1 = 3, num2 = 1;
    it = search_n(v.begin(), v.end(), num1, num2);
    cout << "{ ";
    for (int i = 0; i < num1; i++) {
        cout << num2 << " ";
    }
    cout << "} ";
    if (it != v.end()) {
        cout << it - v.begin() << "에 위치한다.\n";
    }
    else {
        cout << "는 존재하지 않습니다.\n";
    }

    return 0;
}
 
결과

 

 

- search 함수는 인자로 (시작 반복자, 끝 반복자, 찾을 원소 시작 반복자, 찾을 원소 끝 반복자) 를 받는다.

 

 
 
- 해당 vector에 5와 7은 존재하지만 일련하여 존재하지는 않는다.
 
따라서 search 결과 end() 반복자를 반환받어 존재하지 않는다고 출력된다.
 
 
 
 
- {5, 6, 7}의 경우 vector 내에 일련하여 존재한다.
 
따라서 해당 위치의 반복자를 얻어 이를 시작 반복자인 begin()을 빼줌으로서 인덱스를 구할 수 있다.
 
 
 
 
- search_n의 경우 동일한 수가 n번 연속으로 존재하는 위치가 있는지를 탐색할 수 있다.
 
 
 
 
 


3. 참 조

 

 

 

search - C++ Reference

function template std::search equality (1)template ForwardIterator1 search (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2); predicate (2)template ForwardIterator1 search (ForwardIterator1 first

www.cplusplus.com

 

 

 

search_n - C++ Reference

function template std::search_n equality (1)template ForwardIterator search_n (ForwardIterator first, ForwardIterator last, Size count, const T& val); predicate (2)template ForwardIterator search_n ( ForwardIterator first, ForwardIterator last,

www.cplusplus.com

 

 

300x250