我的问题很简单:可以获得指向std :: queue容器适配器底层存储的指针吗?
我正在使用SFML进行渲染的一些模拟,我使用SFML渲染目标(sf :: RenderTarget)的draw()方法来绘制整个数据.该方法具有类似C的接口,期望指向数据的指针,以及具有要绘制的元素数量的std :: size_t.
由于数据存储在队列中用于某些目的,如果有某种方法可以将指针指向存储库底层而不是将数据复制到向量,我将很高兴.
我知道std :: queue默认调整容器std :: deque,但我不知道如何实现循环缓冲区以及它的数据是否连续(所以我可以直接提取指向数据的指针).
编辑:表现
看看下面的答案,让我注意一下,我没有使用std :: deque,因为它有类似于队列的界面,但是因为我真的需要快速排队.当然我可以使用std :: vector.如果性能不是这里的重点,我会使用向量的push_back()和erase(begin()).但我需要的是快速排队以及有效地将该队列的数据移动到渲染目标的方法.当然,如果平衡排队与绘制它的努力进入绘制方面,我将使用std :: vector.
解决方法
Is it possible to obtain a pointer to the underlying storage of a
std::queue container adapter?
简答:没有.
std :: queue需要SequenceContainer类型,如std :: deque或std :: list.这些都不能保证连续存储,因此没有指向底层存储的指针的概念.
如果他们使用连续的循环缓冲区,这将在容器上施加固定大小,或者在需要调整容器大小时产生大量成本(如std :: vector can).
您可以考虑使用boost::circular_buffer
.