큐(Queue) 는 데이터를 FIFO(First In First Out) 방식으로 처리하는 자료구조이다. STL의 <queue>은 이러한 큐를 간단하게 구현할 수 있도록 한다.
push, front, back, size, pop, empty
#include <iostream>
#include <queue>
using namespace std;
int main() {
queue<int> q;
// push: 큐에 요소 추가
q.push(10);
q.push(20);
q.push(30);
// 큐 상태 확인
cout << "Initial queue state:" << '\n';
cout << "Front: " << q.front() << ", Back: " << q.back() << '\n';
cout << "Size: " << q.size() << '\n';
// pop: 요소 제거
cout << "\nProcessing queue:" << '\n';
while (!q.empty()) { // empty: 큐가 비어 있는지 확인
cout << "Front: " << q.front() << ", Back: " << q.back() << '\n';
cout << "Popping: " << q.front() << '\n';
q.pop(); // front 요소 제거
}
// 큐가 비었는지 확인
cout << "\nIs queue empty? " << (q.empty() ? "Yes" : "No") << '\n';
return 0;
}

#include <iostream>
#include <queue>
#include <string>
using namespace std;
class Task {
private:
int priority;
string name;
public:
Task(int p, const string& n) : priority(p), name(n) {}
// 우선순위 반환
int getPriority() const {
return priority;
}
// 이름 반환
string getName() const {
return name;
}
// 출력 함수
void printTask() const {
cout << "Task Name: " << name << ", Priority: " << priority << endl;
}
};
int main() {
queue<Task> taskQueue;
// 작업 추가
taskQueue.push(Task(1, "Design system"));
taskQueue.push(Task(2, "Write documentation"));
taskQueue.push(Task(3, "Test application"));
// 큐 처리
cout << "Processing tasks:\n";
while (!taskQueue.empty()) {
const Task& currentTask = taskQueue.front(); // front로 작업 가져오기
currentTask.printTask(); // 작업 정보 출력
taskQueue.pop(); // 처리한 작업 제거
}
return 0;
}

기본적으로 <queue>는 내부적으로 std::deque를 사용하지만, std::vector 또는 std::list로 대체할 수도 있습니다.
#include <iostream>
#include <queue>
#include <list>
using namespace std;
int main() {
queue<int, list<int>> q; // vector를 내부 컨테이너로 사용
q.push(1);
q.push(2);
q.push(3);
while (!q.empty()) {
cout << q.front() << " ";
q.pop();
}
return 0;
}

※ list가 아닌 vector을 쓴다면?
다음과 같은 오류가 뜨며 진행되지 않는다.

※ 정리
| 특징 | std::deque(기본값) | std::vector | std::list |
|---|---|---|---|
push_back 지원 | 지원 | 지원 | 지원 |
pop_front 지원 | 지원 | 未 지원 | 지원 |
임의 접근([]) 지원 | 지원 | 지원 | 未 지원 |
push_front 지원 | 지원 | 未 지원 | 지원 |
push_back 지원 | 지원 | 지원 | 지원 |
| 캐시 효율성 | 좋음 | 매우 좋음 | 나쁨 |
위 사항 때문에, std::deque은 일반적인 큐 구현이나 앞뒤 작업이 많은 경우에 사용된다. std::vector은 큐에서 pop_front가 필요없거나 캐시 효율이 중요할 때 쓰인다. list은 삽입/삭제가 빈번할 때 사용된다.