предельный размер Очереди <T> в C++

Смотрите на вопрос здесь: Скрытые Функции Visual Studio (2005-2010)?

Это показывает, как сделать это:

"При "Редакторе HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\Text" Создают Строку под названием "Руководства" со значением "RGB (255,0,0) 79", чтобы иметь красную строку в столбце 80 в текстовом редакторе".

19
задан Community 23 May 2017 в 11:54
поделиться

3 ответа

Создайте новый класс, который инкапсулирует очередь и применяет ограничение на размер в новом классе.

13
ответ дан 30 November 2019 в 03:38
поделиться

Похоже, boost :: circuitclar_buffer делает то, что вы ищете:

Запись в полный буфер

Есть несколько варианты как справиться в том случае, если источник данных производит больше данных, чем может поместиться в буфер фиксированного размера:

  1. Сообщите источнику данных подождать, пока в буфере есть место (например, выброс исключения переполнения).
  2. Если самые старые данные больше важно, игнорируйте новые данные из источник, пока не останется место в буфер снова.
  3. Если самые последние данные являются наиболее важными, напишите поверх самые старые данные.
  4. Пусть продюсер отвечает за проверку размера буфер перед записью в него.

Очевидно, что round_buffer реализует третий вариант. Но это может быть менее очевидно не реализует другой вариант - особенно первые два. Можно получить создается впечатление, что round_buffer должен реализовать первые три варианта и предлагаем механизм выбора среди них. Эта впечатление неверное. В round_buffer был разработан и оптимизирован, чтобы быть круглым (что означает перезапись самых старых данных, когда полный). Если такой механизм управления был включен, это просто усложняют дела и использование из кругового_буфера будет вероятно, менее прямолинейно.

8
ответ дан 30 November 2019 в 03:38
поделиться

Предполагая, что под Queue вы имеете в виду std :: queue : очередь - это просто адаптер для некоторого базового контейнера, который прошло во время компиляции. Вы можете использовать контейнер, который уже делает то, что вы хотите. Лучше всего подходит кольцевой буфер, если вы можете найти тот, который поддерживает операции, необходимые для std :: queue (я думаю, что push_back () , pop_front ( ) и size () , но я не проверял).

0
ответ дан 30 November 2019 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: