Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ deque::crbegin() 함수 완벽 가이드 – 역방향 상수 반복자 활용법


이 글에서는 C++에서 deque::crbegin() 함수의 동작 원리와 사용 방법을 자세히 살펴보겠습니다.

덱(Deque)은 양방향 큐(double ended queue)로, 벡터(vector)가 뒤쪽(back) 끝에서만 고성능 삽입을 지원하는 것과 달리 앞(front)과 뒤(back) 양쪽 끝에서 모두 고성능으로 요소의 삽입과 삭제를 수행할 수 있는 컨테이너입니다. 또한 인덱스를 통한 임의 접근(random access)도 지원합니다. 다만 insert() 함수를 사용하면 중간 위치에도 요소를 삽입할 수 있지만, 이 경우 성능은 벡터와 마찬가지로 좋지 않다는 점을 유의해야 합니다.

deque::crbegin()이란 무엇인가?

deque::crbegin()에서 'crbegin'은 constant reverse begin(상수 역방향 시작)의 줄임말입니다. 이름 그대로 컨테이너를 역방향으로 순회할 때의 시작점을 가리키는 const_reverse_iterator(상수 역방향 반복자)를 반환하는 함수입니다.

상수 반복자(Constant Iterator)란?

상수 반복자는 요소를 수정하기 위한 것이 아니라, 오직 읽기(접근) 목적으로 사용됩니다. 따라서 상수 반복자를 통해 가리키는 요소의 값을 변경하려고 하면 컴파일 오류가 발생합니다. 요소를 수정해야 하는 경우에는 비상수(non-const) 반복자인 rbegin()을 사용해야 합니다.

문법(Syntax)

dequename.crbegin()

반환값

컨테이너의 마지막 요소, 즉 역방향 순회의 시작점을 가리키는 const_reverse_iterator를 반환합니다.

멤버 타입인 const_reverse_iterator는 상수(const) 요소를 가리키는 역방향 임의 접근 반복자(reverse random access iterator) 타입으로, 덱의 멤버 타입 중 하나입니다.

예제 코드

#include <iostream>
#include <deque>
int main (){
    std::deque<int> mydeque = {1,2,3,4,5};
    std::cout << "mydeque backwards:";
    for (auto rit = mydeque.crbegin(); rit != mydeque.crend(); ++rit)
        std::cout << ' '<< *rit;
    std::cout << '\n';
    return 0;
}

위 예제에서는 crbegin()부터 crend()(역방향 순회의 끝)까지 반복자를 증가시키며 덱의 요소를 뒤에서부터 앞으로 순회합니다. 상수 반복자이므로 순회 중 요소 값을 변경하지 않고 안전하게 읽기만 수행합니다.

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다 −

mydeque backwards: 5 4 3 2 1

결과에서 확인할 수 있듯이, crbegin()을 사용하면 덱의 마지막 요소(5)부터 첫 번째 요소(1)까지 역순으로 출력됩니다. 데이터를 수정할 필요 없이 역방향 조회만 필요한 경우 crbegin()과 crend()를 함께 사용하는 것이 코드의 의도를 명확히 하고 실수로 인한 값 변경을 방지하는 좋은 습관입니다.