Make Unreal REAL.
article thumbnail

 

함수에서 사용하는 데이터 타입과 알고리즘 로직을 분리하는 것이 모던 C++에서 재사용 가능한 코드를 작성하는 기본 방침이다.

 

재사용 가능한 코드는 Reusable(재사용 가능한)에 관한 것으로, Reusability(재사용성)과 관련된 템플릿 과는 별개의 내용이다.

 

아래는 정수 시퀀스에서 이진 검색을 수행하는 함수이다.

 

bool binary_search(int N, vector<int>& S)
{
    auto first = S.begin();
    auto last = S.end();

    while (true)
    {
        int range_length = distance(first, last);
        auto mid_element_pos = first + range_length / 2;
        auto mid_element = *mid_element_pos;

        if (mid_element == N)
            return true;
        else if (mid_element > N)
            last = mid_element_pos - 1;
        else
            first = mid_element_pos + 1;

        if (range_length < 1)
            return false;
    }
}

 

만약 실수 시퀀스에서 이진 검색을 수행하는 함수를 만들고 싶다고 할 때, 위 코드에서 단순히 함수의 인자를 float으로 변경해주면 된다.

 

함수에서 데이터 타입과 알고리즘 로직을 분리해 가능한 것이고 이런 코드는 재사용 가능한 코드라고 할 수 있다.

 

// bool binary_search(int N, vector<int>& S)
bool binary_search(float N, vector<float>& S)
{
    auto first = S.begin();
    auto last = S.end();

    while (true)
    {
        int range_length = distance(first, last);
        auto mid_element_pos = first + range_length / 2;
        auto mid_element = *mid_element_pos;

        if (mid_element == N)
            return true;
        else if (mid_element > N)
            last = mid_element_pos - 1;
        else
            first = mid_element_pos + 1;

        if (range_length < 1)
            return false;
    }
}

'C++ > 기타' 카테고리의 다른 글

__cplusplus  (0) 2023.02.21
swap(), iter_swap(), swap_ranges()  (0) 2023.02.18
배열의 크기를 확인할 때 주의할 점  (0) 2023.02.13
디폴트 매개변수(Default Parameter)  (0) 2023.01.30
실수를 비교하는 방법  (0) 2023.01.30
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그