这适用于将我的矢量长度保持在我选择的max_size
之下,并且我还没有能够让我的测试中断,但是限制矢量大小的方法安全
if (vector.size() >= max_size) {
vector.erase(vector.begin());
}
用于撤销/重做状态,所以我只想在内存中保留有限数量的状态。
答案 0 :(得分:2)
这种方法可行(假设您一次添加一个元素),但它不会非常快。 std::vector
类型针对结尾而非开头的插入和删除进行了优化,如果std::vector
中包含大量元素,则删除第一个元素的成本可能会很高。如果你要保留一个大的缓冲区,最好使用std::deque
,它针对前端和末尾的删除进行了优化(恰好是你的用例。)
为了它的价值,你可能想要查找术语"循环缓冲区,"这是你在逻辑上谈论的那种数据结构。
答案 1 :(得分:1)
如果在调用方法之前std::vector
增加了多个元素,则此方法无效,因为如果std::vector
大于max_size
,则方法仅删除一个元素。
以下代码将根据std::vector
中有多少额外元素删除一系列元素。
if (vector.size() >= max_size)
{
auto elements_to_erase = (vector.size() - max_size) + 1;
vector.erase(vector.begin(), vector.begin() + elements_to_erase);
}