6

抽象的に言えば、パイプは破壊的な読み取りを行うストリーム/FIFO スタイルのコンテナーです。read()データのチャンクを一度にコピーするメソッドがあり、1 バイトに対してgetやのように機能します。putただし、readorgetが戻ると、パイプからコピーされたデータはパイプの内部バッファーから削除されます - ファイルや他のコンテナー タイプとは異なります。

read()STL コンテナーのほとんど (すべて?) は、バッファー コマンドと同様の機能を提供していません。pop_many()メンバーを持つ fifo コンテナー タイプはありますか?

stringstream内部読み取りポインターを維持し、ストリームが再びいっぱいになるまで将来の読み取りがブロックされるため、私が考えることができる最も近いものです。コンテナーは API の観点からは空ですが、消費されたデータは手動でガベージ コレクションする必要があります。

これを行う C++ の同等のコンテナーまたはストリーム クラスはありますか、それとも独自のロール (stringstream の例のように) の問題ですか?

4

1 に答える 1

1

std::dequeコメントは、一見あなたの最良の選択であるように見えるものをすでに述べています。

それでもうまくいかない場合は、を使用してみてstd::list<std::vector<unsigned char> >ください。一度に1つのベクトルにチャンクを配置し、spliceポップするときにそれらを別のリストに配置します。少量の便利なラッパーコードを提供する必要があります。サブベクトルの1つのすべての要素を一度に読み取りたくない場合は、これでは不十分な場合があります。

于 2012-08-15T13:22:35.123 に答える