더북(TheBook)

vector의 원소들을 정렬하는 코드는 반복자 사용을 설명하기 위한 것이다. 나중에 단 한 문장으로 원소들을 정렬하는 sort() 알고리즘을 보게 될 것이다. 여기서 사용하는 sort 메서드는 원소들을 반복적으로 정렬하며 반복하는 간단한 버블 정렬을 구현한 것이다. 버블 정렬은 각 단계마다 인접 원소가 정렬되어 있지 않으면 교환하는 알고리즘이다. algorithm 헤더에 템플릿으로 정의된 swap() 함수는 타입에 관계없이 원소들을 효율적으로 교환한다. 모든 원소에 대해 전체 단계를 수행했음에도 교환이 발생하지 않았다면 오름차순으로 정렬된 것이다. 바깥 루프는 반복자로 제어되는 for 루프다. first의 초깃값은 begin(words)+1vector에서 두 번째 원소를 가리키는 반복자가 된다. 두 번째 원소부터 시작하는 이유는 first-1을 사용해 인접 원소를 비교할 때 항상 합법적인 걸 보장하기 위함이다. 각 단계는 first가 증가하면서 end에 해당하는 반복자(words)와 일치할 때 끝난다.

정렬한 words 벡터의 출력은 copy() 알고리즘을 사용해 원소들을 출력 스트림 반복자에 전송하는 방식으로 처리했다. begin()end()에서 반환한 반복자로 전송할 범위를 지정했으니 모든 원소가 출력될 것이다. ostream_iterator 생성자에 쓰인 인수들은 데이터가 전달될 스트림과 각 출력 값 다음에 표시될 구분 문자열이다.

main() 코드의 마지막 부분은 이동 반복자를 사용한 이후에 원본 원소들이 이동된 것을 보여준다. words 벡터에 있는 원소들이 이동된 이후에 빈 문자열로 된 string 객체만 남는 것을 출력 결과에서 알 수 있다. 즉, 원소를 이동한 뒤에 인수 없는 string 생성자가 생성한 빈 문자열을 남겨 놓았다. 일반적으로 클래스 객체인 원소를 이동하게 되면 원소를 애매한 상태(indeterminate state)로 남겨 두기 때문에 클래스 객체의 원소 이동은 사용하면 안 된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.