6

在抽象的术语中,管道是具有破坏性读取的流/FIFO 样式容器。它有一种read()方法可以一次复制所有数据块,并且功能类似于getput用于单个字节。当readorget返回时,从管道复制的数据将从管道的内部缓冲区中删除 - 与文件或任何其他容器类型不同。

大多数(全部?)STL 容器不提供类似于read()缓冲区命令的输入。是否有带有pop_many()成员的 fifo 容器类型?

stringstream是我能想到的最接近的事情,因为它维护一个内部读取指针,并且未来的读取将阻塞,直到流再次填满。从 API 的角度来看,容器是空的,但必须手动对消耗的数据进行垃圾收集。

C++ 中是否有一个等效的容器或流类可以做到这一点,或者它是你自己的问题(如在 stringstream 示例中)?

4

1 回答 1

1

评论已经提到std::deque乍一看似乎是您的最佳选择。

如果这对您不起作用,那么使用std::list<std::vector<unsigned char> >. 您一次将块放在一个向量上,然后splice在弹出时将它们放入另一个列表中。您必须提供少量方便的包装器代码,如果您不想一次读取其中一个子向量的所有元素,这可能还不够

于 2012-08-15T13:22:35.123 回答