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

visual which function is faster push_back, insert in C++

本文关键字:c++ 插入 更快 back 函数 push visual      更新时间:2023-10-16

我需要插入到一个向量的末尾,每次2个元素

我想知道是否做向量。Insert (iter_first, iter_second)比vector更快。Push_back(首先),然后是vector。Push_back(秒)?

也许另一种选择是创建一个像这样的结构体:
struct T{int a; int b;};
T t;
t.a = first;
t.b = second;
X.push_back(t);

如果这两个元素在逻辑上是相关的,那么您将使用结构体或类。如果它们不相关,那么出于性能原因,当然不要将它们分组。

这有过早优化的味道。相反,应该编写易于维护的代码,并让编译器为您生成代码。这就是它存在的意义。考虑一下,易于阅读的代码就易于维护,易于维护的代码就易于重构,并且不太可能由于误解而产生细微的性能缺陷。

虽然在您的情况下差异是微不足道的,但通常c++语言标准指定了复杂性信息,因此您不需要询问—您可以查找它。vector::push_back的平摊时间复杂度为常数,而vector::insert要么与插入的元素数量和移动的元素数量成正比,要么与两者的乘积成正比,这取决于你怎么称呼它

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

只有当你有一个大的向量,并且/或者你的对象的复制构造函数令人难以置信的痛苦

时,这才会起作用。

实际上,push_back会调用insert,因此调用push_back两次调用insert。然而在实践中,如果代码已经被优化过,我很惊讶它会产生一个的区别。做合乎逻辑的事情,如果有的话,以后再进行优化性能问题。