제네릭 비교
Coddy C 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 52번째.
C의 표준 라이브러리에 있는 qsort 및 bsearch와 같은 제네릭 함수는 요소의 유형을 알지 못한 채 요소를 비교할 방법이 필요합니다. 해결책은 비교 함수입니다. 즉, 제네릭 알고리즘이 두 항목을 비교해야 할 때마다 호출하는 함수를 직접 작성하는 것입니다.
비교 함수의 표준 시그니처는 다음과 같습니다.
int compare(const void* a, const void* b);두 매개변수는 const void*입니다. 제네릭 함수는 정렬하는 대상의 형식을 알지 못하기 때문입니다. 반환 값은 특정 규칙을 따릅니다:
| 반환 값 | 의미 |
|---|---|
| 음수 | a가 b보다 앞에 옴 |
| 0 | a가 b와 같음 |
| 양수 | a가 b보다 뒤에 옴 |
비교 함수 내부에서 void* 포인터를 실제 형식으로 캐스팅하고 값을 비교합니다. 정수를 비교하는 방법은 다음과 같습니다.
int compare_ints(const void* a, const void* b) {
int val_a = *(const int*)a;
int val_b = *(const int*)b;
return val_a - val_b;
}뺄셈 요령은 정수에 잘 작동합니다. a가 더 작으면 결과는 음수이고, 같으면 0이며, 더 크면 양수입니다. 이제 이 함수를 qsort에 전달하여 정수 배열을 오름차순으로 정렬할 수 있습니다.
챌린지
쉬움qsort와 같은 일반 알고리즘에서 사용되는 표준 비교 함수 규칙에 따라 두 정수를 비교하는 compare_ints 함수를 작성하세요.
함수는 두 값을 비교하고, 두 값의 순서 관계를 나타내는 결과를 반환해야 합니다.
반환 값 규칙:
- 첫 번째 정수가 두 번째 정수보다 앞에 오면(첫 번째 < 두 번째) 음수 값을 반환합니다.
- 두 정수가 같으면 0을 반환합니다.
- 첫 번째 정수가 두 번째 정수보다 뒤에 오면(첫 번째 > 두 번째) 양수 값을 반환합니다.
매개변수:
a(int): 비교할 첫 번째 정수b(int): 비교할 두 번째 정수
반환값: 순서를 나타내는 정수: a < b이면 음수, a == b이면 0, a > b이면 양수입니다.
힌트: 레슨에서 배운 뺄셈 기법을 사용하면 한 줄로 우아하게 해결할 수 있습니다.
직접 해보기
int compare_ints(int a, int b) {
// 여기에 코드를 작성하세요
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 C 컴파일러