.data()等效于std :: queue

Man*_*726 7 c++ containers c++-standard-library c++11

我的问题很简单:有可能获得指向std::queue容器适配器底层存储的指针吗?

我正在使用SFML进行渲染的一些模拟,我使用draw()SFML渲染目标(sf::RenderTarget)的方法来绘制整个数据.该方法具有类似C的接口,期望指向数据的指针,以及std::size_t具有要绘制的元素数量的指针.

由于数据存储在队列中用于某些目的,如果有某种方法可以将指针指向存储库底层而不是将数据复制到向量,我将很高兴.
我知道默认情况下std::queue调整容器std::deque,但我不知道如何实现循环缓冲区以及它的数据是否连续(所以我可以直接提取指向数据的指针).

编辑:表现

看看下面的答案,让我注意到我没有使用std::deque它,因为它看起来很像队列,但是因为我真的需要快速排队.我当然可以用std::vector.如果性能不是这里的重点,那么我会使用push_back()erase( begin() )矢量.但我需要的是快速排队以及有效地将该队列的数据移动到渲染目标的方法.当然,如果平衡排队与绘制它的努力进入平局,我将使用std::vector.

Rod*_*ddy 10

是否有可能获得指向std :: queue容器适配器的底层存储的指针?

简答:不.

std::queue需要一个SequenceContainer类型,如std::dequestd::list.这些都不能保证连续存储,因此没有指向底层存储指针的概念.

如果他们使用连续的循环缓冲区,则要么在容器上施加固定大小,要么在需要调整容器大小时产生大量成本(如std :: vector can).

你可以看一下使用boost::circular_buffer.