维护最大尺寸的矢量?

时间:2016-11-22 01:04:23

标签: c++ vector data-structures

这适用于将我的矢量长度保持在我选择的max_size之下,并且我还没有能够让我的测试中断,但是限制矢量大小的方法安全

  if (vector.size() >= max_size) {
    vector.erase(vector.begin());
  }

用于撤销/重做状态,所以我只想在内存中保留有限数量的状态。

2 个答案:

答案 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);
}