是否有像管道一样工作的C++ STL类?

Mr *_*nky 6 c++ stl

在抽象术语中,管道是具有破坏性读取的流/ FIFO样式容器.它有一个read()方法可以同时复制数据块,get并且put对单个字节起作用.当read或者get返回时,从管道的内部缓冲区中删除从管道中复制的数据 - 与文件或任何其他容器类型不同.

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

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

在C++中是否有一个等效的容器或流类来执行此操作,或者它是一个自己滚动的问题(如在stringstream示例中)?

Mar*_*k B 2

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

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