Заранее извините, если вопрос не очень подробный, но это довольно специфический случай.
Я хочу добавить элементы в контейнер, который очень похож на deque: я хочу иметь возможность push_backи pop_front эффективным способом.Дело в том, что контейнер будет использоваться для хранения sf::Vertex
из библиотеки SFML, и поэтому для его рендеринга мне нужно сделать что-то вроде:
window.draw(&container[0], container.size(), sf::LineStrip)
И это выигралоне работает с deque, поскольку элементы deque не хранятся непрерывно.Итак, поскольку я не очень разбираюсь в использовании памяти, я думаю о двух вариантах:
1) использовать деку и при рендеринге копировать элементы в вектор:
std::deque<sf::Vertex> container;
...
std::vector<sf::Vertex> buffer {container.front(), container.back()};
window.draw(&buffer[0], buffer.size(), sf::LineStrip};
2) напрямую использовать вектор для хранения элементов и вызывать vec.erase(vec.begin());
для вставки элемента в первую позицию
Поскольку вызов pop_front будет выполняться почти в каждом кадреМне было интересно, какой подход стоит меньше всего с точки зрения памяти?
Если у вас есть другая идея, я возьму их:)
РЕДАКТИРОВАТЬ:
Итак, вот что я реализовал вчера вечером:
https://github.com/grybouilli/SFML-sf-Vertex-FIFO-like-container основной код в файлах src и hdr:)