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

C++ 从大向量中删除第一个元素最有效的方法是什么?,c++,vector,C++,Vector,假设我有一个包含100000个元素的向量,我希望一个接一个地迭代向量,同时将元素复制到某种映射中,但是在每次迭代中,从向量中删除元素-最有效的方法是什么 在遍历向量时,我做了类似于“it=vec.erase(it)”的操作,但它需要绝对的时间才能完成。有没有更快的办法?另外,订购是非常重要的…没有。您正在使用向量作为队列。这违背了它的设计 你有几个选择。我立刻想到以下几点: 不要一次擦除一个项目。分批做 使用向量作为环形缓冲区,只需前进一个索引,但永远不要删除元素 使用更合适的容器,如std:

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


在遍历向量时,我做了类似于“it=vec.erase(it)”的操作,但它需要绝对的时间才能完成。有没有更快的办法?另外,订购是非常重要的…

没有。您正在使用向量作为队列。这违背了它的设计

你有几个选择。我立刻想到以下几点:

  • 不要一次擦除一个项目。分批做

  • 使用向量作为环形缓冲区,只需前进一个索引,但永远不要删除元素

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


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

因为向量中元素的顺序并不重要-您将它们放在地图中-简单的解决方案是将第一个元素与最后一个元素交换,然后删除最后一个元素。这将要快得多。

要删除向量中的每个元素吗?你能不能不在最后调用
clear()
?不要使用vector。使用不同的容器。当将元素放入一个容器中时,排序有多重要?嗯,如果使用push_back@BaummitAugen,向量会阻止元素的顺序,但这听起来确实像是队列或链表的工作。@Anedar但映射通常不会。如果你打算这样做,你最好避免交换,只需反向处理向量,每次都会弹出。不,没有混淆。我的想法是基于他们可能希望坚持使用
向量
。在这种情况下,
vector
在删除元素时的性能要比“vector”差得多。没有更多关于他们真正想做什么的细节,我只关注
vector
use。