假设我有一个包含100000个元素的向量,我想逐个迭代这个向量,并将元素复制到某种映射中,但在每次迭代过程中,从向量中删除该元素 - 有没有更有效的方法来做到这一点?
在迭代向量时,我尝试使用"it = vec.erase(it)"的方式,但它需要很长时间才能完成。是否有更快的方法?顺便说一下,顺序非常重要...
这个问题不存在一个简单的解决方案。你正在将vector用作队列,这与它的设计初衷不符。
你有几种选择。以下是我能立即想到的:
不要逐个删除元素,批量删除。
将vector用作环形缓冲区,只需移动索引,但永远不要删除元素。
使用更合适的容器,如std::deque
。
由于向量中元素的顺序并不重要 - 无论如何都会将它们放入映射中 - 简单的解决方案是交换第一个元素和最后一个元素,然后删除最后一个元素。这样会更快。
vector
。在这种情况下,当涉及到删除元素时,vector<SomeMaybeBigElement>
的性能会比vector<SomeMaybeBigElement *>
差很多。由于缺乏更多关于他们真正想做什么的细节,我只关注了vector
的使用。 - Jim Buck
clear()
吗? - Benjamin Lindley