C++에서 `queue`는 FIFO(First In, First Out) 구조를 가진 자료구조로, 데이터가 삽입된 순서대로 처리해야 하는 상황에서 유용하게 사용할 수 있습니다. 이 글에서는 C++의 `queue` 사용 방법을 간단히 설명하고, 실전 예제를 통해 어떻게 활용할 수 있는지 알아보겠습니다.
1. `queue` 헤더와 기본 구조
C++의 `queue`는 `<queue>` 헤더에 정의되어 있습니다. 따라서 `queue`를 사용하려면 먼저 `<queue>` 헤더를 포함해야 합니다.
#include <queue>
#include <iostream>
`queue`는 일반적으로 `std::queue<자료형>` 형식으로 선언합니다. 예를 들어, `int`형 데이터를 저장하는 큐는 `std::queue<int>`로 선언할 수 있습니다.
2. 기본 함수와 활용법
`queue`는 아래와 같은 기본적인 멤버 함수들을 제공합니다.
push(): 큐의 끝에 요소를 추가합니다.
std::queue<int> q;
q.push(10); // 10을 큐의 끝에 추가
q.push(20); // 20을 큐의 끝에 추가
pop(): 큐의 앞에 있는 요소를 제거합니다.
q.pop(); // 큐의 가장 앞에 있는 요소 제거
front(): 큐의 가장 앞에 있는 요소를 반환합니다.
int firstElement = q.front(); // 큐의 가장 앞에 있는 요소 반환
back(): 큐의 가장 끝에 있는 요소를 반환합니다.
int lastElement = q.back(); // 큐의 가장 뒤에 있는 요소 반환
empty(): 큐가 비어 있는지 확인합니다.
if (q.empty()) {
std::cout << "큐가 비어 있습니다." << std::endl;
}
size(): 큐에 있는 요소의 개수를 반환합니다.
std::cout << "큐의 크기: " << q.size() << std::endl;
3. 예제: 고객 대기열 관리 시스템
고객 대기열 관리 시스템을 구현한다고 가정해보겠습니다. 이 시스템에서는 고객들이 줄을 서고, 대기열에 맞춰 순차적으로 서비스됩니다. `queue`를 사용해 대기열을 관리할 수 있습니다.
#include <iostream>
#include <queue>
#include <string>
int main() {
std::queue<std::string> customerQueue;
// 고객이 줄을 섬
customerQueue.push("Alice");
customerQueue.push("Bob");
customerQueue.push("Charlie");
std::cout << "현재 대기 중인 고객 수: " << customerQueue.size() << std::endl;
// 대기열에서 고객 서비스
while (!customerQueue.empty()) {
std::cout << "현재 서비스 중인 고객: " << customerQueue.front() << std::endl;
customerQueue.pop(); // 현재 고객을 대기열에서 제거
}
std::cout << "모든 고객이 서비스를 받았습니다." << std::endl;
return 0;
}
출력 결과
현재 대기 중인 고객 수: 3
현재 서비스 중인 고객: Alice
현재 서비스 중인 고객: Bob
현재 서비스 중인 고객: Charlie
모든 고객이 서비스를 받았습니다.
위 코드에서는 `customerQueue`라는 `queue` 객체를 생성하고, `push()` 함수를 이용해 고객을 순서대로 대기열에 추가했습니다. 이후 `front()`와 `pop()`을 사용해 대기열 맨 앞의 고객을 순차적으로 서비스하고 대기열에서 제거했습니다.
예제 2: 프린터 작업 대기열
프린터는 작업 요청을 순서대로 처리해야 하므로, 작업 대기열을 관리하는 데 `queue`가 적합합니다.
#include <iostream>
#include <queue>
struct PrintJob {
int jobId;
int pages;
};
int main() {
std::queue<PrintJob> printQueue;
// 작업 추가
printQueue.push({1, 10});
printQueue.push({2, 5});
printQueue.push({3, 15});
std::cout << "프린터 작업 대기열에 " << printQueue.size() << "개의 작업이 있습니다." << std::endl;
// 작업 처리
while (!printQueue.empty()) {
PrintJob currentJob = printQueue.front();
std::cout << "작업 ID: " << currentJob.jobId << ", 페이지 수: " << currentJob.pages << " 인쇄 중..." << std::endl;
printQueue.pop();
}
std::cout << "모든 작업이 완료되었습니다." << std::endl;
return 0;
}
출력 결과
프린터 작업 대기열에 3개의 작업이 있습니다.
작업 ID: 1, 페이지 수: 10 인쇄 중...
작업 ID: 2, 페이지 수: 5 인쇄 중...
작업 ID: 3, 페이지 수: 15 인쇄 중...
모든 작업이 완료되었습니다.
이 예제에서는 `PrintJob` 구조체를 사용해 각 작업의 ID와 페이지 수를 저장하고, `queue`를 사용해 작업을 관리했습니다. `front()`와 `pop()`으로 맨 앞의 작업을 처리하고, 작업이 끝나면 대기열에서 제거하는 방식으로 구현했습니다.
5. 정리
`queue`는 데이터를 순서대로 처리해야 할 때 유용한 자료구조입니다. `push()`, `pop()`, `front()` 등의 기본 함수를 사용해 데이터를 효율적으로 관리할 수 있습니다. 대기열을 필요로 하는 다양한 상황, 예를 들어 고객 서비스나 작업 대기열 등에 유용하게 사용할 수 있습니다.
'Programming' 카테고리의 다른 글
C++에서 이차원 배열 초기화 및 사용법 (0) | 2024.11.19 |
---|---|
C++ Queue 초기화 방법 (0) | 2024.11.16 |
C++에서 배열을 초기화하는 방법 (0) | 2024.11.12 |
C++에서 Dictionary를 초기화하는 방법 (0) | 2024.11.11 |
Folium 마커 생성 및 색상 변경하는 방법 (1) | 2024.08.15 |