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

C++ STL deque::shrink_to_fit() 함수 완벽 가이드

이 글에서는 C++ STL에서 deque::shrink_to_fit() 함수의 동작 방식, 문법, 그리고 실제 사용 예제를 자세히 살펴보겠습니다.

Deque(덱)란 무엇인가?

Deque(Double Ended Queue, 양방향 큐)는 양쪽 끝에서 모두 확장과 축소가 가능한 시퀀스 컨테이너입니다. 일반적인 큐(Queue) 자료구조에서는 데이터를 뒤쪽(rear)에만 삽입하고 앞쪽(front)에서만 삭제할 수 있습니다. 버스 정류장의 줄을 떠올려 보면 이해하기 쉽습니다. 새로 온 사람은 줄의 맨 뒤에만 추가되고, 맨 앞에 서 있는 사람부터 먼저 나가게 됩니다. 반면 덱(Double Ended Queue)은 이름 그대로 양쪽 끝 어느 쪽에서든 데이터의 삽입과 삭제가 가능합니다.

deque::shrink_to_fit()이란?

deque::shrink_to_fit()은 C++ STL의 내장 함수로, <deque> 헤더 파일에 선언되어 있습니다. 이 함수는 deque 컨테이너의 용량(capacity)을 현재 요소 개수에 딱 맞는 크기로 줄여 주며, 그 범위를 벗어나는 불필요한 여유 메모리를 해제합니다. 컨테이너가 지정된 크기를 초과했거나 메모리 사용량을 최적화해야 할 때 매우 유용하게 활용됩니다.

문법

mydeque.shrink_to_fit();

이 함수는 별도의 매개변수를 받지 않습니다.

반환 값

이 함수는 아무 값도 반환하지 않습니다(void 타입).

예제 1

입력: deque<int> mydeque = {10, 20, 30, 40, 0, 0, 0};
    mydeque.shrink_to_fit();
출력:
    컨테이너의 용량이 실제 요소 개수에 맞게 축소됩니다.

위 예제에서 deque에는 유효한 데이터(10, 20, 30, 40)와 함께 초기값 0이 포함되어 있습니다. shrink_to_fit()을 호출하면 컨테이너의 용량이 현재 크기에 맞게 조정되어 낭비되는 메모리 공간이 줄어듭니다.

예제 2

#include <bits/stdc++.h>
using namespace std;
int main(){
    deque<int> Deque(50);
    cout<<"Initial size of Deque is : " << Deque.size();
    Deque.resize(40);
    cout<<"\nDeque size after resizing it : " << Deque.size() << endl;
    Deque.shrink_to_fit();
    return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Initial size of Deque is : 50
Deque size after resizing it : 40

처음에 50개의 요소를 가진 deque를 생성한 후, resize(40)을 호출해 크기를 40으로 줄였습니다. 이후 shrink_to_fit()을 호출하면 내부에 할당된 용량 역시 40에 맞게 축소되어 메모리가 효율적으로 관리됩니다.

예제 3

#include <bits/stdc++.h>
using namespace std;
int main(){
    deque<int> Deque(10);
    for (int i = 0; i <= 5; i++)
    Deque[i] = i;
    cout<<"Initial size of Deque is: " << Deque.size();
    cout<<"\n Deque elements are: ";
    for (int i = 0; i <= 7; i++)
       cout << Deque[i] << " ";
    Deque.resize(10);
    cout << "\n After resizing deque size is : "<<Deque.size();
    cout << "\n Deque elements are: ";
    for (int i = 0; i < 10; i++)
       cout << Deque[i] << " ";
    Deque.shrink_to_fit();
    return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Initial size of Deque is: 10
Deque elements are: 0 1 2 3 4 5 0 0
After resizing deque size is : 10
Deque elements are: 0 1 2 3 4 5 0 0 0 0

이 예제에서는 크기 10의 deque를 생성하고 인덱스 0부터 5까지 값을 저장했습니다. resize(10)을 호출해도 이미 크기가 10이므로 변화가 없으며, 마지막으로 shrink_to_fit()을 호출하여 컨테이너의 용량을 실제 크기에 맞게 정리합니다. 이처럼 shrink_to_fit()은 resize() 이후 남는 여유 메모리를 회수할 때 특히 효과적입니다.