0

boost::circular_buffer は、たとえばサイズ 5 の固定長バッファを提供できません。

タイムスタンプ付きのリアルタイム データ ストリームがあることをイメージします。過去 5 分間のすべての要素のバッファを保持したいと考えています。

単純に、std::list のラッパーを作成できます。新しいデータ ポイント D が着信するたびに、push_back(D) してから、5 分以上前のすべてのデータ ポイントを pop_front() に while ループします。

このような設計の問題点は、すべてのポイントに対して新しいインスタンスを作成する必要があることです。これは時間の無駄に思えます (これは非常に頻繁に使用されるオブジェクトです)。

ここの誰かがよりエレガントなソリューションを持っていますか?

ありがとう!

4

1 に答える 1

1

リストまたは両端キューはどちらもリング バッファーに適しています。オブジェクトが簡単にコピー可能で小さい場合は、deque を使用するだけでよく、おそらくメモリ インスタンスについて心配する必要はありません。より大きなデータがある場合は、リストとカスタム オブジェクト プールを使用できます (これにより、未使用の古いオブジェクトが将来の追加のために再利用されます)。

std コレクション オブジェクト プールのセマンティクスが気に入らない場合 (C++11 より前ではくだらない、今はわかりません)、単純にポインターを両端キューに格納して、独自のメモリを管理できます。

于 2012-05-20T14:30:03.237 に答える