함수에서 사용하는 데이터 타입과 알고리즘 로직을 분리하는 것이 모던 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 |