删除向量中的第0个元素需要更多时间

时间:2014-12-04 15:16:52

标签: c++ vector stl

我有实时问题。我使用vector来解决我的问题。问题是我必须遍历列表的90%的时间。 5%的时间我需要push_back数据到列表中。 1%的时间我必须删除。但是在该列表中,如果我有超过1GB的数据,那么要删除第0个元素,它需要超过2分钟并且系统挂起。如何避免它,或任何其他标准模板库可以解决我的问题?

2 个答案:

答案 0 :(得分:9)

所以,第一个解决方案是最简单的。使用不同的数据结构。例如std::deque

我们可以说,出于某种原因,std::deque无效。但此外,您可以重新排序元素。如果是这种情况,那就让我们这样做:

void remove(std::vector<T> elems, int index) {
    swap(elems[index], elems.back());
    elems.pop_back();
}

答案 1 :(得分:3)

以下是一些可能的解决方案:

  1. 根据MikeSeymour的建议,使用deque
  2. 如果您只是需要删除第一个元素,请保持自己指向vector的指针
  3. 使用copy然后resize
  4. #3的例子,说我需要删除3个元素:

    replace(foo.begin(), advance(foo.begin(), 3), advance(foo.end(), -3), foo.end());
    foo.resize(foo.size() - 3);