2012-05-20 4 views
0

boost :: round_buffer cann обеспечивает буфер фиксированной длины, например, при размере 5.Как создать фиксированный круговой буфер длины TIME?

Imaging, что у меня есть поток данных в реальном времени, входящий в timestamp. Я хочу сохранить буфер всех элементов за последние 5 минут.

На самом деле, я могу создать оболочку std :: list, каждый раз, когда появляется новая точка D данных, я push_back (D), а затем выполняю цикл while в pop_front(), все точки данных старше 5 минут ,

Проблема с такой конструкции является то, что я должен построить новый экземпляр для каждой точки, это, кажется, пустая трата времени (это очень активно используется объект)

делает кто-нибудь здесь есть более элегантное решение?

спасибо!

+0

Как бы это было иначе для кругового буфера? Вам также нужно будет строить свои точки данных – Attila

ответ

1

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

Если вам не нравится семантика пула объектов коллекции std (crappy до C++ 11, я не уверен сейчас), вы можете просто сохранить указатели в deque и управлять своей собственной памятью.

Смежные вопросы