如果问题不是很详细,请提前告知,但这是一个非常具体的案例。
我想在一个像deque一样的容器中添加元素:我希望能够以有效的方式使用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文件中的主要代码:)
滚动你自己的容器:
using
公开。作为一种方法,首先要找出您使用的向量容器的哪些接口。从你提到的那里
size()
data()
(拼写&vec[0]
更具表现力的方式)push_back()
pop_front()
首先使用下面的向量定义它们。然后,如果可行,请根据您的特定需求进行优化。