STL 알고리즘 기초: find, sort, count_if
14강. STL 알고리즘 기초: find, sort, count_if
이번 강의에서 해결할 문제
찾기, 정렬, 개수 계산을 매번 직접 반복문으로 작성하면 경계 조건과 비교 규칙이 흩어집니다. 코드만 보고 작업의 목적을 알아내기까지 반복문 내부를 모두 읽어야 합니다.
학습 목표
find,sort,count_if의 입력 범위와 결과를 설명합니다.- 반복자 결과를
end()와 비교합니다. - 람다로 조건을 전달해 목록 질의를 표현합니다.
먼저 알아야 할 핵심 개념
표준 알고리즘은 보통 [begin, end) 반열린 범위를 받습니다. end()는 마지막 원소가 아니라 마지막 다음 위치입니다. find가 값을 못 찾으면 end()를 반환하고, sort는 전달한 범위의 원소 순서를 실제로 바꿉니다.
가장 작은 실행 가능한 예제
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> scores{40, 90, 70, 20};
std::sort(scores.begin(), scores.end());
const auto found = std::find(scores.begin(), scores.end(), 70);
const auto highCount = std::count_if(
scores.begin(), scores.end(),
[](const int score) { return score >= 60; });
std::cout << scores.front() << ' '
<< (found != scores.end()) << ' ' << highCount << '\n';
}
핵심 코드 줄별 설명
sort는 점수를 오름차순으로 재배치합니다.find는 값 70의 위치 또는end()를 반환합니다.- 위치를 사용하기 전에 찾기 성공 여부를 비교합니다.
count_if는 60 이상인 점수 수를 셉니다.- 람다는 무엇을 높은 점수로 볼지 정의합니다.
실행 결과와 값 변화
20 1 2
찾는 값을 75로 바꾸면 가운데 값은 0이 됩니다. 기준을 80으로 올리면 높은 점수는 90 하나뿐입니다.
단계별 실습
실습 목표
아이템 가격 목록에서 값 찾기, 정렬, 조건 개수 계산을 수행합니다.
시작 전 상태와 실행 방법
vector<int> prices{300, 50, 120, 500}를 준비합니다.
1단계: 최소 코드 작성
오름차순 정렬 후 모든 가격을 출력합니다.
2단계: 값 또는 조건을 바꿔 결과 비교
120과 125를 각각 찾아 성공 여부를 비교합니다.
3단계: 작은 기능 확장
예산을 캡처한 람다로 구매 가능한 아이템 수를 계산합니다.
4단계: 스스로 해결하기
아이템 구조체를 가격 기준으로 정렬하는 비교 람다를 작성하세요.
막혔을 때
알고리즘 이름을 찾지 못하면 <algorithm>을 포함합니다. found를 바로 역참조하기 전에 반드시 found != end()를 검사합니다.
흔한 실수와 해결 방법
- find 실패 결과 역참조:
end()는 원소가 아니므로 먼저 비교합니다. - sort가 원본을 유지한다고 생각: 실제 순서가 바뀌므로 복사본이 필요한지 판단합니다.
- 복잡한 부작용을 람다에 숨김: 알고리즘 조건은 가능한 한 같은 입력에 같은 결과를 반환하게 합니다.
게임 개발 연결
거리순 타깃 정렬, 특정 ID 검색, 살아 있는 적 수 계산에 적용할 수 있습니다. 프레임마다 큰 목록을 정렬하면 비용이 커질 수 있으므로 호출 빈도와 데이터 크기를 측정합니다.
이해 점검 질문 3개
end()가 마지막 원소가 아닌 이유는 무엇인가요?find결과를 사용하기 전 어떤 검사가 필요한가요?sort를 호출할 때 원본 데이터에 어떤 변화가 생기나요?
핵심 요약
표준 알고리즘은 반복의 목적을 이름으로 표현합니다. 범위와 반환 계약을 확인하고, 찾기 실패와 원본 변경 여부를 명시적으로 처리합니다.
다음 강의 연결
15강. optional에서 반복자 대신 값이 없을 수 있다는 사실을 반환 타입으로 직접 표현합니다.
STL 알고리즘 기초: find, sort, count_if 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.