c – .data()等效于std :: queue

我的问题很简单:可以获得指向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.

相关文章

对象的传值与返回说起函数,就不免要谈谈函数的参数和返回值...
从实现装饰者模式中思考C++指针和引用的选择最近在看...
关于vtordisp知多少?我相信不少人看到这篇文章,多半是来自...
那些陌生的C++关键字学过程序语言的人相信对关键字并...
命令行下的树形打印最近在处理代码分析问题时,需要将代码的...
虚函数与虚继承寻踪封装、继承、多态是面向对象语言的三大特...