visual哪个函数push_back更快,在c++中插入
visual which function is faster push_back, insert in C++
我需要插入到一个向量的末尾,每次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
。然而在实践中,如果代码已经被优化过,我很惊讶它会产生一个的区别。做合乎逻辑的事情,如果有的话,以后再进行优化性能问题。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 预处理器:插入结构名称中的前一个行号
- 在未初始化映射的情况下,将值插入到映射的映射中
- 如何在c++中只将键插入到bimap的一侧
- 如何将结构插入到集合中并打印集合的成员
- C++json插入数组
- Visual Studio 2019:插入多个C++风格的单行注释
- nlohmann-json将一个数组插入到另一个数组中
- 有效地使用std::unordered_map来插入或增加键的值
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 正在插入动态数组
- 插入或删除时获取usb的dos_name
- 叮叮当当在修复时插入多个"覆盖"说明符
- 链表c++插入,所有情况都已检查,但没有任何工作
- 将重物插入std::map
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- 在数字之间插入 + 或 - 符号以使其等于整数
- 在字符串中插入空格
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?