이 글에서는 C++ STL의 set::crbegin()과 set::crend() 함수에 대해 구문, 동작 방식, 반환값을 중심으로 자세히 알아보겠습니다.
C++ STL에서 set이란?
C++ STL의 set은 고유한(unique) 요소들을 정렬된 순서로 저장하는 컨테이너입니다. 요소의 값 자체가 해당 요소를 식별하는 기준이 되기 때문에 set에는 반드시 중복되지 않는 값만 저장해야 합니다. 한 번 set 컨테이너에 추가된 값은 나중에 수정할 수 없지만, 값을 제거하거나 새로 추가하는 것은 가능합니다. set은 내부적으로 이진 탐색 트리(binary search tree) 구조로 구현됩니다.
set::crbegin()이란?
crbegin() 함수는 C++ STL에 내장된 함수로, <set> 헤더 파일에 정의되어 있습니다. crbegin()은 'constant reverse begin iterator', 즉 상수 역방향 시작 반복자를 의미합니다. 다시 말해 이 함수는 해당 set 컨테이너의 마지막 요소를 가리키는 반복자를 반환합니다. 이름에 'c'가 붙어 있듯이 이 반복자는 상수(const) 반복자이므로 set의 요소를 수정할 수 없으며, 오직 컨테이너를 순회(traverse)하는 용도로만 사용할 수 있습니다.
구문
constant_iterator name_of_set.crbegin();
매개변수
이 함수는 어떠한 매개변수도 받지 않습니다.
반환값
set 컨테이너의 마지막 요소를 가리키는 상수 역방향 반복자(const_reverse_iterator)를 반환합니다.
예제
Input: set<int> myset = {1, 2, 3, 4, 5};
myset.crbegin();
Output: 5실제 코드 예제
#include <bits/stdc++.h>
using namespace std;
int main(){
int arr[] = {1, 2, 3, 4, 5};
set<int> ch(arr, arr + 5);
for (auto i = ch.crbegin(); i != ch.crend(); i++)
cout << *i << " ";
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
5 4 3 2 1
crbegin()부터 crend()까지 순회하면 set의 요소들이 내림차순(역순)으로 출력되는 것을 확인할 수 있습니다.
set::crend()란?
crend() 함수 역시 C++ STL에 내장된 함수로, <set> 헤더 파일에 정의되어 있습니다. crend()는 'constant reverse end iterator', 즉 상수 역방향 끝 반복자를 의미합니다. 이 함수는 set 컨테이너의 첫 번째 위치 바로 앞을 가리키는 반복자를 반환합니다. crbegin()과 마찬가지로 상수 반복자이기 때문에 set을 수정할 수 없으며, 컨테이너를 순회하는 용도로만 사용됩니다.
구문
constant_iterator name_of_set.crend();
매개변수
이 함수는 어떠한 매개변수도 받지 않습니다.
반환값
set 컨테이너의 첫 번째 요소 위치 바로 앞을 가리키는 상수 역방향 반복자를 반환합니다.
예제
Input: set<int> myset = {1, 2, 3, 4, 5};
myset.crend();
Output: 9 // set 컨테이너의 첫 번째 요소 앞에 있는 임의의 값실제 코드 예제
#include <bits/stdc++.h>
using namespace std;
int main(){
int arr[] = {3, 5, 8, 1, 9};
set<int> ch(arr, arr + 5);
for(auto i = ch.crbegin(); i != ch.crend(); i++)
cout << *i << " ";
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
9 8 5 3 1
이처럼 crbegin()과 crend()를 함께 사용하면 set 컨테이너의 모든 요소를 안전하게 역순으로 순회할 수 있으며, 반복자가 상수이므로 순회 도중 데이터가 변경될 위험 없이 읽기 전용 접근이 보장됩니다.