哪个函数更快push_back,在C ++中插入

时间:2011-11-10 14:50:43

标签: c++ visual-c++

我需要在向量的末尾插入每次2个元素。

我想知道执行vector.insert(iter_first,iter_second)是否比执行vector.push_back(first)然后执行vector.push_back(second)更快?

也许另一种选择是创建一个这样的结构:

struct T{int a; int b;};
T t;
t.a = first;
t.b = second;
X.push_back(t);

4 个答案:

答案 0 :(得分:6)

如果两个元素在逻辑上相关,那么您将使用结构或类。如果他们不相关,那么出于性能原因肯定不会将它们分组。

这种过早优化的气味。相反,编写最清晰的代码并让编译器为您生成代码。这就是它的用途。考虑到易于阅读的代码易于维护,易于维护的代码易于重构,并且由于误解而不太可能出现细微的性能错误。

答案 1 :(得分:2)

虽然在你的情况下差异是微不足道的,但一般来说C ++语言标准规定了复杂性信息,所以你不需要问 - 你可以查一下。 vector::push_back has amortized constant time complexityvector::insert is either proportional to the sum of the number of elements inserted and the number of elements moved, or the product of the two, depending on how you call it

答案 2 :(得分:0)

在向量的末尾插入比在向量的中间或开头插入要快得多。

只有当您拥有向量,和/或对象的副本构造函数难以置信时,才会有效。

答案 3 :(得分:0)

实际上,push_back会调用insert,因此请致电 push_back两次最后两次致电insert。然而,在实践中, 如果代码已经优化,如果它成功了,我会感到惊讶 区别。做什么是合乎逻辑的,如果有的话,稍后进行优化 性能问题。