C++에서 deque 컨테이너 사용

Jinku Hu 2023년10월12일
  1. std::deque 컨테이너를 사용하여 빠른 대기열 삽입 / 제거 작업 처리
  2. std::push_back/std::push_front 메서드를 사용하여std::deque에 요소 삽입
  3. push_front 메서드에 래퍼 함수를 사용하여 고정 크기 대기열 구현
C++에서 deque 컨테이너 사용

이 기사는 C++에서std::deque 컨테이너를 사용하는 방법에 대한 여러 방법을 보여줍니다.

std::deque 컨테이너를 사용하여 빠른 대기열 삽입 / 제거 작업 처리

std::deque는 끝에서 일정한 시간 삽입 및 삭제 작업을 제공하는 양단 대기열을 구현합니다. 따라서이 데이터 구조는 이러한 작업이 대부분의 트랜잭션을 구성하는 시나리오에서 활용되어야합니다. 단점은std::deque 요소가 연속적인 메모리 위치에 저장되지 않고 작업을 처리하기 위해 추가 작업이 필요하므로std::vector 컨테이너보다 더 많은 객체 크기가 필요합니다. 다음 예제는vector 객체에서 생성 된 문자열의deque를 보여줍니다. 문자열 입력의 새 요소는emplace_back 메소드를 사용하여 추가하는 것이 좋습니다.

#include <deque>
#include <iostream>
#include <vector>

using std::cout;
using std::deque;
using std::endl;
using std::string;
using std::vector;

template <typename T>
void printElements(deque<T> &d) {
  cout << "[ ";
  for (const auto &item : d) {
    cout << item << ", ";
  }
  cout << "\b\b ]" << endl;
}

int main() {
  vector<string> vec = {"plie", "flie", "blie", "clie"};
  ;

  deque<string> deque2(vec.begin(), vec.end());
  deque2.emplace_back("hlie");
  printElements(deque2);

  exit(EXIT_SUCCESS);
}

출력:

[ plie, flie, blie, clie, hlie ]

std::push_back/std::push_front 메서드를 사용하여std::deque에 요소 삽입

std::deque에는 요소 조작을위한 풍부한 기능을 제공하는 여러 내장 함수가 있습니다. 가장 일반적인 방법은push_backpush_front 메소드로, 주어진 객체를deque의 해당면에 요소로 추가합니다. 이러한 함수에는 pop_backpop_front요소를 제거하는 역방향 메서드가 있습니다. 다음 예제는 위의 방법의 기본 사용법을 보여줍니다.

#include <deque>
#include <iostream>
#include <vector>

using std::cout;
using std::deque;
using std::endl;
using std::string;
using std::vector;

template <typename T>
void printElements(deque<T> &d) {
  cout << "[ ";
  for (const auto &item : d) {
    cout << item << ", ";
  }
  cout << "\b\b ]" << endl;
}

int main() {
  vector<string> vec = {"plie", "flie", "blie", "clie"};
  ;

  deque<string> deque2(vec.begin(), vec.end());

  string str1("alie");
  deque2.push_back(str1);
  printElements(deque2);
  deque2.push_front(str1);
  printElements(deque2);

  deque2.pop_back();
  deque2.pop_front();
  printElements(deque2);

  exit(EXIT_SUCCESS);
}

출력:

[ plie, flie, blie, clie, alie ]
[ alie, plie, flie, blie, clie, alie ]
[ plie, flie, blie, clie ]

push_front 메서드에 래퍼 함수를 사용하여 고정 크기 대기열 구현

std::deque 컨테이너를 활용하여n 개의 요소를 저장하는 고정 된 크기의 스택으로 작동하는 또 다른 방법이며, 가득 차면 자동으로 새로운 삽입 할 때마다 뒤에서 요소를 제거합니다. 이 경우 push_frontpop_back메서드를 별도의 함수로 래핑하여이 기능을 구현했습니다. 이 페이지에 광범위하게 설명되어있는std::stack 컨테이너 어댑터를 사용하여 동일한 기능을 구현할 수도 있습니다.

#include <deque>
#include <iostream>

using std::cout;
using std::deque;
using std::endl;
using std::string;

template <typename T>
void printElements(deque<T> &d) {
  cout << "[ ";
  for (const auto &item : d) {
    cout << item << ", ";
  }
  cout << "\b\b ]" << endl;
}

template <typename T>
void pushElement(T &elem, deque<T> &d) {
  d.push_front(elem);
  d.pop_back();
}

int main() {
  deque<int> deque1 = {3, 5, 7, 9};
  int i1 = 11;

  printElements(deque1);
  pushElement(i1, deque1);
  printElements(deque1);

  exit(EXIT_SUCCESS);
}

출력:

[ 3, 5, 7, 9 ]
[ 11, 3, 5, 7 ]
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook