C++에서 list::crbegin()과 list::crend() 함수는 C++ 표준 템플릿 라이브러리(STL)의 list 컨테이너에 속한 멤버 함수로, 리스트를 역방향으로 순회할 때 사용됩니다. 이 함수들을 호출하려면 <list> 헤더 파일을 소스 코드에 반드시 포함해야 합니다.
list::crbegin() 함수란?
list::crbegin() 함수는 리스트의 마지막 요소, 즉 역방향 순회의 시작 지점을 가리키는 상수 역방향 반복자(constant reverse iterator)를 반환합니다. 이 반복자를 사용하면 리스트를 끝에서부터 앞쪽으로 거슬러 올라가며 탐색할 수 있습니다. 다만 반환되는 반복자는 상수이므로 리스트의 값을 수정할 수 없으며, 오직 읽기 전용 순회 목적으로만 사용할 수 있습니다.
문법
List_Name.crbegin()
매개변수
이 함수는 어떠한 매개변수도 받지 않습니다.
반환값
리스트의 역방향 시작 요소, 즉 리스트의 마지막 요소를 가리키는 상수 역방향 반복자를 반환합니다.
list::crend() 함수란?
list::crend() 함수는 역방향 순회의 끝을 나타내는 상수 역방향 반복자를 반환합니다. 이 위치는 리스트의 첫 번째 요소 바로 앞에 해당하는 이론상의 위치입니다. crend() 역시 리스트를 역방향으로 탐색하는 데 사용할 수 있지만, 상수 반복자이므로 리스트의 값을 변경할 수 없고 읽기 전용 순회에만 활용됩니다.
문법
List_Name.crend()
매개변수
이 함수는 매개변수를 받지 않습니다.
반환값
리스트의 역방향 끝, 즉 리스트의 첫 번째 요소 앞 위치를 가리키는 상수 역방향 반복자를 반환합니다.
예제
입력: list<int> Lt = {99, 34, 55}
출력: 마지막 요소는 55
설명: 위 예제에서는 99, 34, 55 세 개의 요소를 가진 리스트를 생성했습니다. 그다음 crbegin() 함수를 호출했는데, 이 함수는 리스트의 역방향 시작점, 즉 리스트의 마지막 요소를 가리킵니다. 따라서 해당 값을 출력하면 리스트의 마지막 요소인 55가 화면에 표시됩니다.
프로그램의 동작 방식
- 먼저 int 타입의 리스트(예: Lt)를 생성하고 원하는 값들을 할당합니다.
- auto 타입의 반복자 객체 itr를 생성하고, crbegin() 함수의 반환값으로 초기화하여 역방향 순회를 시작합니다.
- 반복 조건은 itr가 crend()가 반환하는 역방향 끝 위치와 같지 않은 동안으로 설정합니다.
- 루프 내부에서 *itr를 출력하여 현재 가리키는 요소의 값을 확인합니다.
- itr++ 연산을 통해 반복자를 이전 요소 방향으로 한 칸씩 이동시킵니다.
알고리즘
시작
1단계 -> main() 함수에서
list<int> Lt={} 초기화
auto itr = Lt.crbegin() 으로 시작하여 itr != Lt.crend() 인 동안 itr++ 반복
*itr 출력
종료
예제 코드
#include<iostream>
#include<list>
using namespace std;
int main() {
list<int> Lt = { 33, 44, 55, 66 };
// crbegin()으로 마지막 요소 확인
cout << "리스트의 마지막 요소: " << *Lt.crbegin() << "\n";
// crend()까지 역방향 순회하며 모든 요소 출력
cout << "역방향 순회 결과:\n";
for (auto itr = Lt.crbegin(); itr != Lt.crend(); itr++)
cout << *itr << " ";
return 0;
}
실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
리스트의 마지막 요소: 66 역방향 순회 결과: 66 55 44 33
정리
crbegin()과 crend()는 각각 rbegin()과 rend()의 상수 버전으로, 리스트를 변경하지 않으면서 역방향으로 데이터를 읽어야 할 때 안전하게 사용할 수 있습니다. 특히 리스트를 const 참조로 전달받았거나 실수에 의한 값 변경을 방지하고 싶은 경우에 매우 유용합니다.