Как я понимаю, deque является циклическим буфером, и когда ему не хватает места, он выделяет новое пространство (если может). Есть ли способ ограничить deque может расти?
Или единственный способ убедиться, что он не превышает максимального размера, это проверять каждый раз, когда я хочу вставить данные в deque?
Да, как и в каждой коллекции STL, одним из шаблонных параметров является распределитель.
Таким образом, вы можете написать свой собственный распределитель, который будет отслеживать память и выбрасывать bad_alloc
если вы превысите этот предел, даже если память доступна.
Кстати, std::deque
обычно реализуется как набор «страниц», где каждая страница содержит фиксированное количество элементов.
Если вы хотите реализацию циклического буфера, где вы можете вставить или удалить «где угодно», std::deque
не будет наиболее эффективным в использовании, std::list
будет (хотя есть круглые коллекции доступны в Boost вы могли бы использовать).
deque
не является циклическим буфером; как правило, он реализуется как связанный набор массивов. Для циклического буфера, посмотрите на circular_buffer
в Boost.
Как показывает мой опыт, самый простой способ — инкапсулировать deque классом-оберткой и написать две функции-члена push_back
а также push_front
Deque не является кольцевым буфером. Он может быть реализован в виде циклического буфера, но детали реализации скрыты от пользователя. Я предлагаю вам написать класс-оболочку или вспомогательные функции для проверки размера за вас.