더북(TheBook)

1.4.1 반복자 얻기

컨테이너의 반복자는 컨테이너 객체에서 begin()end() 멤버 함수를 호출해서 얻을 수 있다. 그러니까 begin()은 첫 번째 원소, end()는 마지막 원소를 하나 더 지나친 위치를 가리키는 반복자를 반환한다. 컨테이너의 end() 멤버가 반환하는 반복자는 유효 객체를 가리키지 않으므로 이 반복자는 역참조하거나 증가시킬 수 없다. std::string 같은 문자열 클래스도 begin(), end() 멤버 함수가 있으므로 문자열 클래스에 대한 반복자도 얻을 수 있다. 컨테이너 객체를 인수로 전역 함수 std::begin()std::end()를 호출해도 컨테이너의 멤버 함수 begin()end()가 반환하는 반복자와 같은 반복자를 얻을 수 있다. 전역 함수 begin()end()는 일반 배열이나 문자열 객체를 인수로 받아도 동작하며 반복자를 얻는 단일 방법을 제공한다.

▲ 그림 1-1 반복자가 동작하는 방식

 

반복자를 이용하면 범위에 있는 원소들을 하나씩 처리할 수 있다. 그림 1-1을 보면 begin 반복자를 증가시킬 때마다 한 객체에서 옆 객체로 이동한다. 그림에서 컨테이너는 문자열 객체나 배열 객체일 수도 있고, STL 컨테이너도 될 수 있다. 증가시킨 begin 반복자와 end 반복자를 비교하면 마지막 원소에 도착했는지 결정할 수 있다. 반복자에 적용할 수 있는 다른 연산도 있지만, 이러한 연산은 반복자의 유형에 따라 결정되며, 마찬가지로 반복자의 유형은 사용하려는 컨테이너의 종류에 따라 결정된다. 배열, 컨테이너 또는 문자열 객체의 const 반복자를 반환하는 전역 함수 cbegin()cend()도 있다. 기억하라. const 반복자는 변경되지 말아야 할 것을 가리키지만, 반복자 자체는 바꿀 수 있다. 다른 유형의 반복자를 반환하는 전역 함수에 대해서는 이 절의 뒤에서 소개하겠다.

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