[전문가를 위한 C++] 반복자와 범위 라이브러리
‘전문가를 위한 C++ - Marc Gregoire 지음, 남기혁 옮김’ 책을 참고하여 작성한 포스트입니다.
반복자
- 표준 라이브러리는 컨테이너의 원소에 접근하는 기능을 일반화한 반복자 패턴을 사용한다.
- 원소에 대한 반복문을 지원하는 스마트 포인터가 반복자 이다. 컨테이너의 특정 원소를 가리키는 포인터이다.
- operator++
- 다음 원소를 가리킴
- operator* , operator->
- 원소의 필드나 원소 자체에 접근
- 반복자는 반드시 복제 생성자, 복제 대입 연산자, 소멸자를 제공해야 한다.
- lvalue는 반드시 맞바꾸기(swap)를 지원해야 한다.
컨테이너에서 반복자 받기
- 표준 라이브러리의 컨테이너 클래스들은 모두 반복자 타입에 대해 public 타입 앨리어스인 iterator와 const_iterator를 제공한다.
- begin()
- 컨테이너의 첫 번째 항목을 참조하는 반복자 리턴
- end()
- 마지막 항목의 바로 다음 원소에 해당하는 지점을 가리키는 반복자 리턴
- 마지막 항목에서 operator++를 적용한 결과를 리턴한다고 볼 수 있음
- begin(), end()는 첫 원소는 포함하지만 마지막 원소는 포함하지 않는 반개방 범위(half-open range)를 지원한다.
- cbegin(), cend()
- const 반복자를 리턴
- rbegin(), rend()
- 역방향 반복자를 리턴
- rcbegin(), rcend()
- const 역박향 반복자를 리턴
<iterator>
에는 컨테이너의 특정 반복자를 리턴하는 글로벌 비 멤버함수도 있다.- begin(), end(), cbegin(), cend(), rbegin(), rend(), rcbegin(), rcend()
- 글로벌 비 멤버함수를 이용하는 것이 좋다.
- std::distance()
- 두 반복자 사이의 거리를 계산
Leave a comment