less than 1 minute read

‘전문가를 위한 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