Container
vector 삽입처럼 컨테이너를 바꾸면 기존 반복자가 무효화될 수 있어 알고리즘 실행 중 구조 변경을 피합니다.
STL 알고리즘은 컨테이너가 아니라 [first, last) 반복자 범위와 predicate/comparator 계약을 받습니다. 범위 무효화와 복잡도도 호출자의 책임입니다.
vector 삽입처럼 컨테이너를 바꾸면 기존 반복자가 무효화될 수 있어 알고리즘 실행 중 구조 변경을 피합니다.
first는 포함, last는 제외입니다. 서로 다른 컨테이너의 반복자를 섞으면 범위 계약이 깨집니다.
sort는 random access iterator가 필요하고 O(N log N)을 기대합니다. list에는 list::sort를 씁니다.
출력 범위는 충분해야 합니다. 크기를 모르면 back_inserter를 쓰고, 겹치는 입출력은 알고리즘별 허용 여부를 확인합니다.
predicate는 bool 조건, comparator는 strict weak ordering을 지켜야 sort 결과가 안정적으로 정의됩니다.
알고리즘 이름만 보지 말고 반복자 범위의 유효성, 쓰기 가능한 출력 공간, 비교 함수의 엄격 약순서, 컨테이너 변경으로 인한 무효화를 같이 확인합니다.