[英]Is there a way to check when a queue from a standard library c++ is full?
在標准 C++ 庫中, std::queue
沒有檢查是否已滿的功能。
std::queue
容器適配器沒有導出它的成員函數。 然而, std::queue
默認包裝一個std::deque
,它有一個成員函數max_size()
返回deque
的最大支持大小。 如果您需要使用此功能,您可以切換並使用deque
而不是queue
。
請注意,大多數deque::max_size
的實現只會返回用於編碼大小的整數類型的最大值,這可能比您實際可以放入deque
的值大得多。 如果您使用的是 C++ 的嵌入式版本,則庫實現者可能以不同方式實現了max_size
,但您不應該依賴它,除非您有一些特定於實現的文檔。 通常, std::deque
只是隨着元素的添加而動態增長,並在沒有更多內存可用時達到最大值,而不是對大小設置硬上限。
std::queue
已滿。queue
中使用它的容器。std::queue
並將限制放在那里。 這是實施施加限制的容器的基本示例。 您還需要實施emplace_back
等才能真正發揮作用。
#include <iostream>
#include <new>
#include <queue>
#include <stdexcept>
// cheating by inheriting from std::deque
template<typename T, std::size_t max>
struct limited_deque : std::deque<T> {
using std::deque<T>::deque;
// the limit imposing push_back
void push_back(const T& value) {
if(this->size() == max) throw std::bad_alloc();
// call the base class push_back
std::deque<T>::push_back(value);
}
};
// convenience alias
template<typename T, std::size_t max>
using limited_queue = std::queue<T, limited_deque<T, max>>;
int main() {
limited_queue<int, 5> x;
std::cout << "queue size : " << x.size() << "\n";
try {
for(int i = 0; i < 10; ++i) x.push(i);
} catch(const std::exception& ex) {
std::cout << ex.what() << "\n";
}
std::cout << "queue size : " << x.size() << "\n";
}
很可能的輸出:
queue size : 0
std::bad_alloc
queue size : 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.