cbegin, begin, rbegin, cend, end, rend 등의 차이점
C++의 STL 컨테이너들은 Iterator(반복자)를 통해서 내부에 있는 데이터의 한 위치를 가리킬 수가 있습니다.
Iterator는 for 문을 돌리거나 STL이 제공하는 알고리즘을 실행할 때 사용하게 됩니다.
begin(), end()는 순방향으로 움직일 때 사용하며, rbegin(), rend()는 역방향으로 움직일 때 사용합니다.
iterator 타입은 선언할 때 타입 이름이 상당히 길게 열거됩니다.
std::vector< std::vector<int>>::iterator it = ptWord.begin();
그래서 C++11에서는 auto 라는 키워드가 추가가 되었습니다.
그런데 auto 키워드의 문제는 begin(), end(), rbegin(), rend() 로는 const_iterator 타입을 받을 수 없다는 것입니다.
begin()으로 받으면 타입 추론에 의해서 iterator 타입으로 받게 됩니다.
이런 이유로 cbegin()과 cend(), crbegin(), crend()가 새롭게 추가되었습니다.
상수 반복자라는 의미로 앞에 c가 붙었습니다.
이렇게 되면 반복자가 가리키는 곳의 값을 변경할 수 없습니다.
역방향 상수 반복자의 경우 const_reverse_iterator로 타입명만 해도 상당한 길이입니다.
auto와 crbegin()을 사용하면 간단하게 표현이 가능합니다.
auto it = ptWord.crbegin();
또한 순방향도 아래와 같이 간단하게 표현이 가능합니다.
auto it = ptWord.cbegin();
auto 키워드와 cbegin(), range based for loop 등을 사용하면 STL을 보다 편리하게 사용 가능해집니다.