如果问题不是很详细,请提前抱歉,但这是一个非常具体的情况。
我想在像双端队列的容器中添加元素:我希望能够以一种有效的方式来push_back和pop_front。事实是,该容器将用于存储SFML库中的sf::Vertex
,因此要渲染它,我将必须执行以下操作:
window.draw(&container[0], container.size(), sf::LineStrip)
这不适用于双端队列,因为双端队列的元素不是连续存储的。因此,由于我对内存使用了解不多,因此我想到了两个选择:
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文件中的主要代码:)
答案 0 :(得分:3)
滚动自己的容器:
using
公开获取您需要的vector中的那些方法。作为一种方法,首先找出您使用的向量容器的接口。从您提到的内容来看
size()
data()
(拼写&vec[0]
的更具表现力的方式)push_back()
pop_front()
首先使用下面的矢量定义它们。然后,如果可行,请根据您的特定需求对其进行优化。