이 글에서는 C++ STL의 queue::emplace() 함수가 어떻게 동작하는지, 그 문법과 다양한 사용 예제를 자세히 살펴보겠습니다.
C++ STL에서 큐(queue)란 무엇인가?
큐(queue)는 C++ STL에 정의된 간단한 시퀀스 컨테이너로, 데이터를 FIFO(First In First Out, 선입선출) 방식으로 삽입하고 삭제하는 자료 구조입니다. 즉, 가장 먼저 들어간 요소가 가장 먼저 나오게 됩니다. 요소는 큐의 뒤쪽(rear)에서 삽입되고, 앞쪽(front)에서 제거됩니다. C++ STL에는 이러한 큐의 특성을 그대로 구현한 사전 정의 템플릿인 std::queue가 포함되어 있어, 별도의 구현 없이도 손쉽게 큐를 활용할 수 있습니다.
queue::emplace()란 무엇인가?
queue::emplace()는 C++ STL의 내장 함수로, <queue> 헤더 파일에 선언되어 있습니다. 이 함수는 큐 컨테이너의 맨 뒤에 새로운 요소를 삽입하는 역할을 합니다.
큐의 구조상 새로운 요소는 항상 컨테이너의 뒤쪽 끝에 추가되기 때문에, emplace()는 내부적으로 emplace_back()을 호출하여 큐의 마지막 위치에 요소를 삽입합니다. push()와 달리 emplace()는 전달된 인자를 바탕으로 요소를 컨테이너 내부에서 직접 생성(in-place construction)하므로, 복사나 이동 비용을 줄일 수 있어 더욱 효율적입니다.
문법(Syntax)
myqueue.emplace(value_type &t);
이 함수는 매개변수를 하나만 받습니다. 바로 해당 큐 컨테이너에 삽입할 요소입니다. 인자로 전달된 값은 큐의 요소 타입(value_type)과 일치해야 하며, 필요한 경우 해당 타입의 생성자가 호출되어 요소가 직접 생성됩니다.
반환 값(Return Value)
이 함수는 아무런 값도 반환하지 않습니다(void). 삽입이 성공하면 큐의 크기가 1만큼 증가합니다.
동작 예시
입력: queue<int> myqueue = {10, 20, 30, 40};
myqueue.emplace(50);
출력:
큐의 요소 = 10 20 30 40 50위 예시처럼 기존 큐 {10, 20, 30, 40}에 emplace(50)을 호출하면, 50이 큐의 맨 뒤에 추가되어 최종적으로 5개의 요소를 갖게 됩니다.
예제 1: 정수형 큐에 요소 삽입하기
#include <iostream>
#include <queue>
using namespace std;
int main (){
queue<int> Queue;
Queue.emplace(10);
Queue.emplace(20);
Queue.emplace(30);
Queue.emplace(40);
Queue.emplace(50);
cout<<"Elements in Queue are: ";
while(!Queue.empty()){
cout << ' ' << Queue.front();
Queue.pop();
}
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 출력 결과가 생성됩니다.
Elements in Queue are: 10 20 30 40 50
예제 2: 문자열(string) 큐에 요소 삽입하기
#include <iostream>
#include <queue>
using namespace std;
int main(){
queue<string> Queue;
Queue.emplace("Welcome");
Queue.emplace("To");
Queue.emplace("Tutorials");
Queue.emplace("Point");
cout<<"String is : ";
while (!Queue.empty()){
cout << ' ' << Queue.front();
Queue.pop();
}
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 출력 결과가 생성됩니다.
String is : Welcome To Tutorials Point
정리
queue::emplace()는 큐 컨테이너의 맨 뒤에 새로운 요소를 효율적으로 삽입할 수 있는 유용한 함수입니다. 특히 객체 타입을 다룰 때 불필요한 복사 연산을 피할 수 있어 성능 면에서 이점을 제공합니다. 위의 예제들을 직접 실행해 보면서 emplace()의 동작 방식을 익혀두면 실제 프로젝트에서 큐를 다룰 때 큰 도움이 될 것입니다.