C++에서 deque 컨테이너 사용
-
std::deque
컨테이너를 사용하여 빠른 대기열 삽입 / 제거 작업 처리 -
std::push_back
/std::push_front
메서드를 사용하여std::deque
에 요소 삽입 -
push_front
메서드에 래퍼 함수를 사용하여 고정 크기 대기열 구현
이 기사는 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_back
및push_front
메소드로, 주어진 객체를deque
의 해당면에 요소로 추가합니다. 이러한 함수에는 pop_back
및 pop_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_front
및 pop_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 ]
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