이 글에서는 C++ STL에서 deque::push_front() 함수의 동작 방식, 문법 그리고 다양한 예제를 통해 어떻게 활용되는지 자세히 알아보겠습니다.
덱(Deque)이란?
덱(Double Ended Queue)은 양쪽 끝에서 모두 확장과 축소가 가능한 시퀀스 컨테이너입니다. 일반적인 큐(Queue) 자료구조는 데이터를 뒤쪽(Rear)에만 삽입할 수 있고 앞쪽(Front)에서만 삭제할 수 있습니다. 버스 정류장의 줄을 예로 들어보면, 사람은 줄의 맨 뒤에만 새로 설 수 있으며 맨 앞에 서 있는 사람이 가장 먼저 탑승하게 됩니다.
반면 덱(Double Ended Queue)은 이름 그대로 양쪽 끝 모두에서 데이터의 삽입과 삭제가 가능한 자료구조입니다.
deque::push_front()란?
deque::push_front()는 C++ STL에 내장된 함수로, <deque> 헤더 파일에 선언되어 있습니다. 이 함수는 덱 컨테이너의 맨 앞(front)에 요소를 삽입하며, 새로 삽입된 요소는 덱의 첫 번째 요소가 됩니다.
이 함수는 매개변수를 하나만 받으며, 해당 매개변수는 덱의 시작 부분에 삽입할 요소입니다.
문법(Syntax)
mydeque.push_front(const value_type& value);
이 함수는 덱의 맨 앞에 삽입할 요소 하나를 매개변수로 받습니다.
반환 값(Return Value)
이 함수는 아무 값도 반환하지 않습니다(void).
예제 입력 및 출력
입력: deque<int> mydeque = {10, 20, 30, 40};
mydeque.push_front(9);
출력:
Deque elements: 9 10 20 30 40
입력: deque<int> mydeque;
mydeque.push_front(5);
출력: 5예제 1: 기본 사용법
#include <deque>
#include <iostream>
using namespace std;
int main(){
deque<int> Deque = { 20, 30, 40, 50 };
Deque.push_front(10);
cout<<"Elements in Deque are : ";
for(auto i = Deque.begin(); i!= Deque.end(); ++i)
cout << ' ' << *i;
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다 −
Elements in Deque are : 10 20 30 40 50
push_front(10) 호출 후 10이 기존 요소들 {20, 30, 40, 50}의 맨 앞에 추가되어 최종적으로 {10, 20, 30, 40, 50} 순서가 된 것을 확인할 수 있습니다.
예제 2: push_front와 pop_front 조합
#include <deque>
#include <iostream>
using namespace std;
int main(){
int total = 0;
deque<int> Deque;
Deque.push_front(10);
Deque.push_front(20);
Deque.push_front(30);
Deque.push_front(40);
while (!Deque.empty()){
total++;
Deque.pop_front();
}
cout<<"Total number of elements in a deque are : "<<total;
return 0;
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다 −
Total number of elements in a deque are : 4
이 예제에서는 push_front()로 10, 20, 30, 40을 차례로 삽입했기 때문에 덱에는 {40, 30, 20, 10} 순서로 저장됩니다. 이후 while 루프에서 pop_front()를 반복 호출하며 덱이 빌 때까지 요소를 하나씩 제거하고, 그 횟수를 세어 총 요소 개수인 4를 출력합니다.
정리
deque::push_front()는 덱의 맨 앞에 요소를 삽입하는 간단하고 직관적인 함수입니다. 참고로 이 연산은 내부적으로 상수 시간, 즉 O(1)의 시간 복잡도로 수행되므로 성능 걱정 없이 사용할 수 있습니다. 벡터(vector)와 달리 덱은 앞쪽 삽입·삭제에도 효율적이라는 점이 큰 장점입니다.