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

C++ STL Deque의 emplace_front( )와 emplace_back( ) 함수 완벽 정리

이 글에서는 C++ STL에서 deque emplace_front( ) 함수와 deque emplace_back( ) 함수의 기능과 사용 방법을 자세히 알아봅니다.

Deque(덱)란 무엇인가?

Deque(Double-Ended Queue, 덱)는 양쪽 끝에서 요소의 확장과 축소, 즉 삽입과 삭제가 모두 가능한 시퀀스 컨테이너입니다. 일반적인 큐(Queue) 자료구조는 데이터를 뒤쪽(END)에만 삽입하고 앞쪽(FRONT)에서만 삭제할 수 있습니다. 버스 정류장의 줄을 예로 들면, 새로 온 사람은 줄의 맨 뒤에만 설 수 있고 맨 앞에 서 있는 사람부터 차례로 제거됩니다. 반면 덱은 이름 그대로 양쪽 끝 어느 쪽에서든 데이터의 삽입과 삭제가 자유롭습니다.

emplace_front( ) 함수란?

emplace_front( ) 함수는 덱의 맨 앞(시작 부분)에 새로운 요소를 삽입합니다. push_front( )와 비슷하지만, 복사나 이동 과정 없이 전달된 인수를 해당 위치에서 직접 생성(in-place construction)하기 때문에 더 효율적일 수 있습니다.

문법(Syntax)

dequename.emplace_front(value)

매개변수(Parameters)

value − 덱의 맨 앞에 삽입할 새로운 요소를 의미합니다.

예제

입력 Deque − 12 13 14 15 16
출력 New Deque − 11 12 13 14 15 16

입력 Deque − O R C E
출력 New Deque − F O R C E

접근 방식

  • 먼저 덱을 선언하고 초기화합니다.
  • 선언한 덱을 화면에 출력합니다.
  • emplace_front( ) 함수를 호출하여 새 요소를 삽입합니다.
  • 새 요소가 추가된 덱을 다시 출력합니다.

위 접근 방식을 사용하면 덱의 시작 위치에 새로운 요소를 손쉽게 추가할 수 있습니다. 이때 삽입할 새 요소는 함수의 매개변수로 전달되며, 덱에 저장된 데이터 타입과 동일한 타입이어야 합니다.

C++ 코드 예제

// deque emplace_front( ) 함수의 동작을 보여주는 C++ 코드
#include <iostream>
#include <deque>
using namespace std;
int main(){
   // 덱 초기화
   deque<int> dq = { 85, 87, 88, 89, 90 };
   // 덱 출력
   cout << "Deque: ";
   for(auto x = dq.begin(); x != dq.end(); ++x)
      cout << *x << " ";
   // emplace_front( ) 함수로 맨 앞에 새 요소 삽입
   dq.emplace_front(78);
   // 새 요소 삽입 후 덱 출력
   cout << "\nNew Deque: ";
   for(auto x = dq.begin(); x != dq.end(); ++x)
      cout << *x << " ";
   return 0;
}

출력 결과

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

입력 - Deque: 85 87 88 89 90
출력 - New Deque: 78 85 87 88 89 90

실행 결과를 보면 값 78이 기존 덱의 맨 앞에 성공적으로 삽입된 것을 확인할 수 있습니다.

emplace_back( ) 함수란?

emplace_back( ) 함수는 emplace_front( )와 반대로 덱의 맨 뒤(끝 부분)에 새로운 요소를 삽입합니다. 문법과 동작 방식은 emplace_front( )와 완전히 동일하며, 삽입되는 위치만 다릅니다.

문법(Syntax)

dequename.emplace_back(value)

예제

#include <iostream>
#include <deque>
using namespace std;
int main(){
   deque<int> dq = { 10, 20, 30 };
   dq.emplace_back(40);  // 맨 뒤에 40 삽입
   for(int x : dq)
      cout << x << " ";  // 출력: 10 20 30 40
   return 0;
}

정리

emplace_front( )는 덱의 앞쪽에, emplace_back( )은 덱의 뒤쪽에 새 요소를 효율적으로 삽입하는 함수입니다. 두 함수 모두 불필요한 복사나 이동을 줄여 성능상 이점이 있으므로, 단순 값 삽입 시 push_front( ), push_back( ) 대신 활용하면 좋습니다.