我有一个std :: vector [1,2,3,4,5],我想获得另一个包含所有元素的矢量,但第二个一:[1,3,4,5]。其中一个办法就是(VEC 1是我的输入向量):最快的方式来创建一个std :: vector的副本减一个元素
std::vector<int> vec2;
vec2 = vec1;
vec2.erase(vec2.begin()+1)
在这里,我真的不喜欢它是O(n)的复杂性擦除,所以考虑到阵,我将有2n个操作的副本。我以为老的虚拟方式会更好:
std::vector<int> vec2;
for(int i=0; i<vec1.size(); ++i){
if (i != 1)
vec2.push_back(vec1[i]);
}
这是分期的O(n)时间。渐近行为是相同的,但操作次数可能更小。
我必须对相当小的矢量(大约100个元素)执行此操作,但我拥有数十亿个元素。我会注意到一个重要的区别?
你会怎么做?
电话储备。至于你是否会注意到它的差异,很好地描述它,这是获得可靠答案的唯一方法。 – Borgleader
也许你应该重新考虑你的算法,如果你不需要,不要复制。另外检查插入() –
你可以反向迭代你的矢量,并删除最后一个元素,所以你不必复制。或者您可以跟踪应该是第一个元素的索引并从中迭代到结束。有很多方法可以避免复制。 –