在抽象术语中,管道是具有破坏性读取的流/ FIFO样式容器。它有一个read()
方法可以同时复制数据块,而get
和put
等函数用于单个字节。当read
或get
返回时,从管道中复制的数据将从管道的内部缓冲区中删除 - 与文件或任何其他容器类型不同。
大多数(全部?)STL容器不向缓冲区命令提供类似的read()
。是否有带pop_many()
成员的fifo容器类型?
stringstream
是我能想到的最接近的东西,因为它维护了一个内部读指针,未来的读取将阻塞,直到流再次填满。从API的角度来看,容器是空的,但消耗的数据必须手动进行垃圾收集。
在C ++中是否有一个等效的容器或流类来执行此操作,或者它是一个自己滚动的问题(如在stringstream示例中)?
答案 0 :(得分:1)
评论已经提到std::deque
乍一看似乎是您的最佳选择。
如果这对您不起作用,请使用std::list<std::vector<unsigned char> >
。您一次将一个块放在一个向量上,当您弹出时,将它们splice
放到另一个列表中。您必须提供少量的便利包装代码,如果不想要一次读取其中一个子向量的所有元素,这可能就不够了。