C++ deque의 emplace_back() 함수란?
C++ STL(표준 템플릿 라이브러리)에서 제공하는 emplace_back() 함수는 deque(덱) 컨테이너의 맨 끝에 새로운 요소를 삽입할 때 사용하는 멤버 함수입니다. 이 함수는 기존 객체를 복사하거나 이동하는 대신 전달된 인자를 활용해 컨테이너 내부에서 요소를 직접 생성(in-place construction)하기 때문에, 특히 객체 타입을 다룰 때 push_back()보다 성능상 유리한 경우가 많습니다.
문법(Syntax)
dequename.emplace_back(value)
매개변수(Parameter)
value − deque의 맨 끝에 삽입할 요소를 지정합니다. 이때 삽입할 값의 자료형은 반드시 deque가 선언될 때 사용된 자료형과 동일해야 합니다.
예제
입력 Deque − 11 12 13 14 15
출력 New Deque − 11 12 13 14 15 16
입력 Deque − M O M E N T
출력 New Deque − M O M E N T S
구현 절차
먼저 deque를 선언하고 초기화합니다.
초기 상태의 deque를 화면에 출력합니다.
emplace_back()함수를 호출하면서 새로운 요소를 매개변수로 전달합니다.새 요소가 삽입된 이후의 deque를 출력합니다.
위 절차를 따르면 deque의 끝에 새로운 요소를 간단하게 추가할 수 있습니다. 함수 호출 시 새로운 요소를 매개변수로 넘겨주며, 이 요소는 반드시 deque와 같은 자료형이어야 한다는 점에 유의해야 합니다.
예제 코드
// deque emplace_back() 함수의 동작을 보여주는 C++ 코드
#include <iostream>
#include <deque>
using namespace std;
int main() {
// deque 초기화
deque<int> dq = { 14, 15, 16, 17, 18 };
cout << "Deque: ";
for (auto x = dq.begin(); x != dq.end(); ++x)
cout << *x << " ";
// emplace_back() 함수 호출
dq.emplace_back(19);
// 새 요소 삽입 후 deque 출력
cout << "\nNew deque: ";
for (auto x = dq.begin(); x != dq.end(); ++x)
cout << *x << " ";
return 0;
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Deque: 14 15 16 17 18 New deque: 14 15 16 17 18 19
emplace_back()과 push_back()의 차이점
push_back()은 이미 생성된 객체를 복사하거나 이동시켜 컨테이너에 추가하는 방식입니다. 반면 emplace_back()은 전달받은 인자를 사용해 컨테이너 내부에서 객체를 직접 생성하므로 불필요한 복사 연산이 줄어듭니다. 따라서 클래스나 구조체처럼 생성 비용이 큰 타입을 자주 삽입해야 하는 상황이라면 emplace_back()을 사용하는 것이 더 효율적입니다.