Algorithm preflight

STL 알고리즘 선택 전 점검표

알고리즘 이름만 보고 고르지 말고, 반복자 능력과 부작용을 먼저 맞추면 템플릿 오류와 논리 버그를 줄일 수 있습니다.

3 필수 확인
I

반복자 요구 조건

`sort`는 임의 접근 반복자, `find`는 입력 반복자만 있어도 됩니다.

E

컨테이너 변화 여부

`remove`는 크기를 줄이지 않으므로 `erase`와 함께 확인합니다.

T

타입 연산 가능성

비교, 대입, 이동 가능성은 사용자 정의 타입에서 특히 중요합니다.

반복자별 대표 선택

입력

`find`, `count`, `for_each`처럼 한 번 읽는 작업

순방향

`remove`, `replace`처럼 결과 위치를 유지하는 작업

임의 접근

`sort`, `binary_search`처럼 위치 계산이 필요한 작업

실수 방지 규칙

헤더 먼저 `algorithm`, `numeric`, `functional`을 용도에 맞게 포함
범위 확인 `first`부터 `last` 직전까지만 처리되는지 점검
비교자 일관성 정렬 비교자는 엄격한 약한 순서를 만족해야 함
무효화 확인 컨테이너 수정 후 반복자를 계속 써도 되는지 확인

erase-remove 관용구 흐름

1. 조건 선택 `remove_if`에 제거 조건 전달
2. 유효 구간 이동 남길 요소를 앞쪽으로 재배치
3. 새 끝 반복자 논리적 끝 위치를 반환
4. 실제 삭제 `erase(newEnd, end)`로 크기 축소