c++ - .data() 等效于 std::queue

标签 c++ c++11 containers c++-standard-library

我的问题很简单:是否可以获得指向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::dequestd::list .这些都不能保证连续存储,因此没有指向底层存储的指针的概念。

如果他们使用连续的循环缓冲区,这将在容器上施加固定大小,或者在需要调整容器大小时产生大量成本(如 std::vector 可以)。

你可以看看使用 boost::circular_buffer相反。

关于c++ - .data() 等效于 std::queue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24589664/

相关文章:

c++ - 未创建新目录

c++ - "Memory allocated at compile time"的真正含义是什么?

c++ - 为什么内存函数的默认模板参数应该明确定义为非法?

C++ - 使用额外参数排序

c++ - 这个语义调用哪个构造函数?

c++ - Shared_ptr成员变量的多态分配

c++ - 将虚拟方法作为接收迭代器的模板

docker - 如何在我的 ubuntu 容器中安装 Docker?

python - 在单个 docker 容器或连接到同一个数据库的两个容器中运行两个进程?

html - 没有内联的 Flexbox 容器适合内容