My question is simple: Its possible to obtain a pointer to the underlying storage of a std::queue
container adapter?
I'm working on some simulations using SFML for rendering, and I use the draw()
method of the SFML render target (sf::RenderTarget
) to draw the entire bunch of data. That method has a C-like interface expecting a pointer to the data and a std::size_t
with the number of elements to draw.
Since the data is stored in a queue for some purposes, I will be glad if there is some way to get that pointer to the queue underlying storage instead of copying the data to a vector.
I know that std::queue
adapts the container std::deque
by default, but I don't know how that circular buffer is implemented and if its data is contiguous (So I can extract a pointer to the data directly).
EDIT: Performance
Looking at the answers bellow, let me note that I'm not using std::deque
because its fancy queue-like interface, but because I really need fast queueing. Of course I can use std::vector
. If performance wasn't the point here I would have used push_back()
and erase( begin() )
of vector. But what I need is fast queueing and a way to move the data of that queue to the render target efficiently. Of course if the balance queueing vs effort to draw it goes to the draw side, I will use std::vector
.