什么是从大型矢量中删除第一个元素的最有效方法?

时间:2016-02-11 23:51:03

标签: c++ vector

假设我有一个包含100000个元素的向量,我希望逐个遍历向量,同时将元素复制到某种类型的映射中,但在每次迭代中,从向量中删除元素 - 什么是最有效的方法吗?

在遍历向量的同时,我做了类似"它= vec.erase(it)"但它需要绝对的年龄才能完成。有没有更快的方法?作为旁注,订购非常重要......

3 个答案:

答案 0 :(得分:4)

没有。您正在将矢量用作队列。这违背了它的设计。

你有几个选择。以下是立即想到的:

  • 不要一次删除一个项目。分批进行。

  • 将矢量用作环形缓冲区,只需前进一个索引,但不要删除元素。

  • 使用更合适的容器,例如std::deque

答案 1 :(得分:0)

由于向量中元素的顺序不重要 - 无论如何你都将它们放在地图中 - 简单的解决方案是将第一个元素与最后一个元素交换,然后删除最后一个元素。那会更快。

答案 2 :(得分:-2)

如果您需要使用vector,那么根据您的要求,您应该使用vector指向动态分配的对象实例而不是vector个对象本身