C++에서 `queue`는 순차적으로 데이터를 처리해야 하는 상황에서 매우 유용한 자료구조입니다. 기본적인 사용 방법을 익혔다면, 효율적으로 `queue`를 초기화하는 방법도 알아두는 것이 좋습니다. 이번 글에서는 C++ `queue`를 초기화하는 여러 가지 방법에 대해 살펴보겠습니다.
1. 기본 생성자를 통한 초기화
가장 간단한 초기화 방법은 기본 생성자를 사용하는 것입니다. 이 방식은 빈 큐를 생성하며, 이후에 `push()`를 사용하여 요소를 추가할 수 있습니다.
#include <queue>
#include <iostream>
int main() {
std::queue<int> q; // 빈 큐 생성
q.push(1);
q.push(2);
q.push(3);
std::cout << "큐의 첫 번째 요소: " << q.front() << std::endl;
return 0;
}
이 방식은 큐를 빈 상태로 생성하며, 필요에 따라 요소를 추가할 수 있어 기본적인 초기화에 자주 사용됩니다.
2. 다른 컨테이너로 초기화하기
`queue`는 내부적으로 `deque` 컨테이너를 사용하지만, 다른 컨테이너(`deque` 또는 `list`)를 기반으로 초기화할 수 있습니다. 이 방법은 기존에 데이터를 저장한 컨테이너가 있을 때 유용합니다.
예시: `deque`로 초기화
#include <queue>
#include <deque>
#include <iostream>
int main() {
std::deque<int> d = {1, 2, 3, 4, 5};
std::queue<int> q(d); // deque을 이용해 queue 초기화
std::cout << "큐의 첫 번째 요소: " << q.front() << std::endl;
return 0;
}
위 코드에서 `deque` 컨테이너 `d`의 모든 요소가 `queue`에 복사되어 초기화됩니다.
예시: `list`로 초기화
`list`를 이용하여 `queue`를 초기화할 수도 있습니다. 다만, `queue`는 내부적으로 `deque`를 기본 컨테이너로 사용하기 때문에, `list` 초기화는 상대적으로 덜 일반적입니다.
#include <queue>
#include <list>
#include <iostream>
int main() {
std::list<int> l = {10, 20, 30};
std::queue<int, std::list<int>> q(l); // list를 이용해 queue 초기화
std::cout << "큐의 첫 번째 요소: " << q.front() << std::endl;
return 0;
}
위와 같이 `list`로 `queue`를 초기화하려면, `std::queue<int, std::list<int>>`와 같이 컨테이너 형식을 명시해야 합니다.
3. 범위 기반 초기화 (C++11 이상)
C++11부터는 `std::initializer_list`를 통해 여러 요소를 간편하게 초기화할 수 있습니다. 하지만 `queue`는 `initializer_list`를 직접 지원하지 않으므로, `std::deque` 또는 `std::list`를 중간에 사용하여 초기화해야 합니다.
#include <queue>
#include <deque>
#include <iostream>
int main() {
std::queue<int> q(std::deque<int>{1, 2, 3, 4}); // initializer_list 사용
std::cout << "큐의 첫 번째 요소: " << q.front() << std::endl;
return 0;
}
위 코드에서는 `std::deque`를 통해 초기화 리스트를 간접적으로 사용하여 큐를 초기화하고 있습니다. `std::deque<int>{1, 2, 3, 4}`와 같이 초기값을 지정해 간결하게 큐를 초기화할 수 있습니다.
4. 빈 `queue`를 복사하여 초기화하기
다른 `queue`를 복사하여 초기화할 수도 있습니다. 이 방법은 동일한 요소를 가진 또 다른 큐가 필요할 때 유용합니다.
#include <queue>
#include <iostream>
int main() {
std::queue<int> originalQueue;
originalQueue.push(1);
originalQueue.push(2);
originalQueue.push(3);
// 기존 큐를 복사하여 새 큐 생성
std::queue<int> copiedQueue = originalQueue;
std::cout << "복사된 큐의 첫 번째 요소: " << copiedQueue.front() << std::endl;
return 0;
}
이 예제에서는 `originalQueue`에 있는 모든 요소가 `copiedQueue`로 복사됩니다. 복사된 큐를 독립적으로 사용할 수 있어 데이터 복사가 필요한 경우에 유용합니다.
5. 사용자 정의 함수로 초기화하기
초기화 작업이 복잡하거나 특정 규칙에 따라 큐를 초기화해야 하는 경우, 사용자 정의 함수를 통해 큐를 초기화할 수 있습니다.
#include <queue>
#include <iostream>
std::queue<int> initializeQueue() {
std::queue<int> q;
for (int i = 1; i <= 5; ++i) {
q.push(i * 10); // 규칙에 따라 요소 추가
}
return q;
}
int main() {
std::queue<int> q = initializeQueue();
std::cout << "초기화된 큐의 첫 번째 요소: " << q.front() << std::endl;
return 0;
}
위 코드에서는 `initializeQueue()` 함수를 통해 규칙에 맞는 요소를 추가하여 큐를 초기화했습니다. 이 방법은 요소를 추가하는 로직이 복잡하거나, 코드의 가독성을 높이고자 할 때 효과적입니다.
'Programming' 카테고리의 다른 글
Git에서 삭제되지 않는 원격 브랜치 삭제 방법 (0) | 2024.11.28 |
---|---|
C++에서 이차원 배열 초기화 및 사용법 (0) | 2024.11.19 |
C++로 Queue를 사용하는 방법 (0) | 2024.11.13 |
C++에서 배열을 초기화하는 방법 (0) | 2024.11.12 |
C++에서 Dictionary를 초기화하는 방법 (0) | 2024.11.11 |