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

C++ STL deque insert() 함수 완벽 정리: 문법부터 예제까지

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( ) 함수를 활용한 프로그램은 일반적으로 다음 순서로 작성합니다.

  1. 먼저 덱을 선언하고 초기화합니다.
  2. 덱의 현재 내용을 출력합니다.
  3. insert( ) 함수를 호출해 원하는 위치에 요소를 삽입합니다.
  4. 삽입 후의 결과를 확인하기 위해 덱을 다시 출력합니다.

예제 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( ) 함수의 사용법을 잘 익혀두면 큰 도움이 될 것입니다.