이 글에서는 C++ STL의 set::get_allocator() 함수가 무엇인지, 어떤 구문으로 사용되는지, 내부적으로 어떻게 동작하는지, 그리고 어떤 값을 반환하는지까지 차근차근 살펴보겠습니다.
C++ STL에서 Set(집합)이란?
C++ STL의 set은 고유한(unique) 요소들을 정렬된 순서로 저장하는 연관 컨테이너입니다. 각 요소의 값이 곧 그 요소를 식별하는 기준이 되기 때문에, set에는 반드시 중복되지 않는 값만 저장해야 합니다.
한 번 set 컨테이너에 추가된 요소의 값은 이후에 수정할 수 없습니다. 대신 기존 값을 제거하거나 새로운 값을 추가하는 것은 언제든 가능합니다. 내부적으로 set은 이진 탐색 트리(binary search tree) 구조로 구현되어 있어 검색, 삽입, 삭제 작업이 효율적으로 이루어집니다.
set::get_allocator()란 무엇인가?
get_allocator()는 C++ STL에 내장된 함수로, <set> 헤더 파일에 정의되어 있습니다. 이 함수는 해당 set 컨테이너와 연관된 할당자(allocator) 객체의 복사본을 반환합니다.
여기서 할당자(allocator)란 set 컨테이너가 필요로 하는 메모리를 동적으로 할당하고 해제하는 역할을 담당하는 객체를 의미합니다. 즉, get_allocator()는 set 컨테이너에 메모리 블록(chunk)을 직접 할당할 때 활용됩니다.
구문(Syntax)
Set1.get_allocator();
매개변수(Parameter)
이 함수는 별도의 매개변수를 받지 않습니다.
반환값(Return Value)
이 함수는 해당 함수 객체와 연관된 할당자(allocator) 또는 그 복사본을 반환합니다.
예제 코드
#include <iostream>
#include <set>
using namespace std;
void input(int* arr){
for(int i = 0; i <= 5; i++)
arr[i] = i;
}
void output(int* arr){
for (int i = 0; i <= 5; i++)
cout << arr[i] << " ";
cout << endl;
}
int main(){
set<int> mySet;
int* arr;
arr = mySet.get_allocator().allocate(6);
input(arr);
output(arr);
mySet.get_allocator().deallocate(arr, 6);
return 0;
}위 코드의 동작 흐름을 간단히 설명하면 다음과 같습니다.
mySet.get_allocator().allocate(6)를 통해 set의 할당자로부터 크기 6짜리 int 배열용 메모리를 동적으로 할당합니다.input()함수가 배열에 0부터 5까지의 값을 채워 넣습니다.output()함수가 배열의 모든 요소를 화면에 출력합니다.- 마지막으로
deallocate(arr, 6)를 호출하여 할당받았던 메모리를 해제합니다.
실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
0 1 2 3 4 5