Установить deque max_size до максимального размера

Как я понимаю, deque является циклическим буфером, и когда ему не хватает места, он выделяет новое пространство (если может). Есть ли способ ограничить deque может расти?
Или единственный способ убедиться, что он не превышает максимального размера, это проверять каждый раз, когда я хочу вставить данные в deque?

0

Решение

Да, как и в каждой коллекции STL, одним из шаблонных параметров является распределитель.

Таким образом, вы можете написать свой собственный распределитель, который будет отслеживать память и выбрасывать bad_alloc если вы превысите этот предел, даже если память доступна.

Кстати, std::deque обычно реализуется как набор «страниц», где каждая страница содержит фиксированное количество элементов.

Если вы хотите реализацию циклического буфера, где вы можете вставить или удалить «где угодно», std::deque не будет наиболее эффективным в использовании, std::list будет (хотя есть круглые коллекции доступны в Boost вы могли бы использовать).

2

Другие решения

deque не является циклическим буфером; как правило, он реализуется как связанный набор массивов. Для циклического буфера, посмотрите на circular_buffer в Boost.

1

Как показывает мой опыт, самый простой способ — инкапсулировать deque классом-оберткой и написать две функции-члена push_back а также push_front

1

Deque не является кольцевым буфером. Он может быть реализован в виде циклического буфера, но детали реализации скрыты от пользователя. Я предлагаю вам написать класс-оболочку или вспомогательные функции для проверки размера за вас.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector