C++ STL에서 제공하는 deque의 insert( ) 함수는 덱 내부의 특정 위치에 새로운 요소를 삽입할 때 사용하는 핵심 멤버 함수입니다. 이 글에서는 insert( ) 함수의 문법, 매개변수, 반환값은 물론 다양한 예제 코드를 통해 실제 동작 방식까지 자세히 알아보겠습니다.
덱(Deque)이란 무엇인가?
덱(Double Ended Queue, 데크)은 양쪽 끝(front와 back) 모두에서 요소의 삽입과 삭제, 즉 확장과 축소가 가능한 시퀀스 컨테이너(sequence container)입니다. 일반적인 큐(queue) 자료구조는 데이터를 한쪽 끝에서만 삽입하고 반대쪽 끝에서만 삭제할 수 있습니다. 버스 정류장에 줄 서 있는 사람들에 비유하면, 새로 온 사람은 맨 뒤에 줄을 서야 하고 맨 앞에 선 사람부터 먼저 탑승하게 되죠(FIFO, 선입선출). 반면 덱은 양쪽 끝 어느 쪽에서든 데이터의 삽입과 삭제가 자유롭다는 점이 가장 큰 차이입니다.
insert( ) 함수란?
deque의 insert( ) 함수는 덱에 새로운 요소를 삽입하는 데 사용되며, 다음 세 가지 방식으로 활용할 수 있습니다.
- 지정한 위치에 단일 요소를 삽입합니다.
- 지정한 위치에 동일한 요소 n개를 반복해서 삽입합니다.
- 지정한 위치에 다른 컨테이너의 특정 범위에 있는 요소들을 한꺼번에 삽입합니다.
문법(Syntax)
deque_name.insert(iterator position, const value_type& value); deque_name.insert(iterator position, size_type n, const value_type& value); deque_name.insert(iterator position, iterator first, iterator last);
매개변수(Parameters)
- value – 삽입할 새로운 요소의 값을 지정합니다.
- n – 삽입할 요소의 개수를 지정합니다.
- first, last – 삽입할 요소들의 범위를 나타내는 반복자(iterator)를 지정합니다.
반환값(Return Value)
새로 삽입된 첫 번째 요소를 가리키는 반복자(iterator)를 반환합니다.
예시
입력 : Deque – 1 2 3 4 5
출력 : New Deque – 1 1 2 3 4 5
입력 : Deque – 11 12 13 14 15
출력 : New Deque – 11 12 12 12 13 14 15
구현 순서
insert( ) 함수를 활용한 프로그램은 일반적으로 다음 순서로 작성합니다.
- 먼저 덱을 선언하고 초기화합니다.
- 덱의 현재 내용을 출력합니다.
- insert( ) 함수를 호출해 원하는 위치에 요소를 삽입합니다.
- 삽입 후의 결과를 확인하기 위해 덱을 다시 출력합니다.
예제 1: 단일 요소 삽입하기
// deque insert( ) 함수의 동작을 보여주는 C++ 코드
#include <iostream>
#include <deque>
using namespace std;
int main() {
// 덱 선언 및 초기화
deque<int> dq = { 55, 84, 38, 66, 67 };
// 덱 출력
cout << "Deque: ";
for (auto x = dq.begin(); x != dq.end(); ++x)
cout << *x << " ";
// insert( ) 함수로 맨 앞에 22 삽입
dq.insert(dq.begin(), 22);
// 삽입 후 덱 출력
cout << "\nNew Deque: ";
for (auto x = dq.begin(); x != dq.end(); ++x)
cout << *x << " ";
return 0;
}
실행 결과
Deque: 55 84 38 66 67 New Deque: 22 55 84 38 66 67
예제 2: 동일한 요소 여러 개 삽입하기
// deque insert( ) 함수의 동작을 보여주는 C++ 코드
#include <iostream>
#include <deque>
using namespace std;
int main() {
deque<char> dq = { 'B', 'L', 'D' };
cout << "Deque: ";
for (auto x = dq.begin(); x != dq.end(); ++x)
cout << *x << " ";
// 세 번째 위치에 문자 'O'를 2개 삽입
dq.insert(dq.begin() + 2, 2, 'O');
cout << "\nNew Deque: ";
for (auto x = dq.begin(); x != dq.end(); ++x)
cout << *x << " ";
return 0;
}
실행 결과
Deque: B L D New Deque: B L O O D
예제 3: 다른 컨테이너의 범위 삽입하기
// deque insert( ) 함수의 동작을 보여주는 C++ 코드
#include <iostream>
#include <deque>
#include <vector>
using namespace std;
int main() {
deque<int> dq = { 65, 54, 32, 98, 55 };
cout << "Deque: ";
for (auto x = dq.begin(); x != dq.end(); ++x)
cout << *x << " ";
// 값 19로 채워진 3개의 요소를 가진 벡터 생성
vector<int> v(3, 19);
// 벡터의 전체 범위를 덱의 두 번째 위치에 삽입
dq.insert(dq.begin() + 1, v.begin(), v.end());
cout << "\nNew Deque: ";
for (auto x = dq.begin(); x != dq.end(); ++x)
cout << *x << " ";
return 0;
}
실행 결과
Deque: 65 54 32 98 55 New Deque: 65 19 19 19 54 32 98 55
마무리
지금까지 C++ STL의 deque insert( ) 함수를 살펴보았습니다. 이 함수는 단일 요소 삽입, 동일 요소 반복 삽입, 다른 컨테이너 범위 삽입이라는 세 가지 오버로드 형태를 제공하기 때문에 상황에 맞게 유연하게 활용할 수 있습니다. 덱은 양쪽 끝에서의 빠른 삽입과 삭제가 필요한 알고리즘 문제나 실무 개발에서 매우 유용한 자료구조이므로, insert( ) 함수의 사용법을 잘 익혀두면 큰 도움이 될 것입니다.