在抽象术语中,管道是一个具有破坏性读取的流/先进先出(FIFO)样式容器。它具有一个
大多数(全部?)STL容器都不提供类似于向缓冲区读取数据的
在C++中是否有等效的容器或流类执行此操作,还是需要自己编写代码(如stringstream示例)?
read()
方法,一次性复制数据块,并且有像get
和put
这样的单字节函数。但是当read
或get
返回时,从管道内部缓冲区复制出来的数据将从管道中删除,这与文件或任何其他容器类型不同。大多数(全部?)STL容器都不提供类似于向缓冲区读取数据的
read()
命令。是否有具有pop_many()
成员的FIFO容器类型?
stringstream
是我能想到的最接近的东西,因为它维护一个内部读指针,并且将来的读取将阻塞,直到流再次填满。从API的角度来看,容器是空的,但是消耗的数据必须手动进行垃圾回收。在C++中是否有等效的容器或流类执行此操作,还是需要自己编写代码(如stringstream示例)?
char buffer[];
来实现这一点,但我想知道C++ STL是否已经在标准库中有了类似的东西。 - Mr Stinkystd::deque
似乎最符合您的需求。但是,如果支持容器是deque
,那么queue.pop()
上的循环并不会非常低效。它的调整大小操作并不昂贵。 - Benjamin Lindleystd::copy(deque.begin(), deque.begin() + N, destination)
可以翻译成:将deque
容器中起始位置到前N
个元素拷贝到目标容器destination
中。 - Benjamin Lindley