我的问题很简单:是否可以获得指向std::queue
容器适配器的底层存储的指针?
我正在使用 SFML 进行一些模拟渲染,我使用 SFML 渲染目标 (sf::RenderTarget
) 的 draw()
方法来绘制整串数据。该方法有一个类似于 C 的接口(interface),需要一个指向数据的指针和一个包含要绘制的元素数量的 std::size_t
。
由于出于某些目的将数据存储在队列中,如果有某种方法可以使该指针指向队列底层存储而不是将数据复制到 vector 中,我将很高兴。
我知道 std::queue
默认适应容器 std::deque
,但我不知道循环缓冲区是如何实现的以及它的数据是否连续(所以我可以直接提取指向数据的指针)。
编辑:性能
看看下面的答案,请注意,我使用 std::deque
不是因为它有花哨的类似队列的界面,而是因为我真的需要快速排队。当然我可以使用 std::vector
。如果性能不是这里的重点,我会使用 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 可以)。
你可以看看使用 boost::circular_buffer
相反。
关于c++ - .data() 等效于 std::queue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24589664/