emplace_back与push_back的区别
程序员文章站
2022-03-21 16:30:00
...
下面举了几种比较常见的情况:(以下所有代码均假设存在一个Teacher类)
1、
#include <vector>
int main(){
std::vector<Teacher> v;
Teacher t1;
v.push_back(t1);
return 0;
}
执行v.push_back(Teacher());这段代码时,会发生拷贝构造,也就是将t1对象完全copy一份到vector容器中
2、
#include <vector>
int main(){
std::vector<Teacher> v;
Teacher t1;
v.push_back(std::move(t1));
return 0;
}
执行.push_back(std::move(t1));这段代码时,会发生移动构造。通俗一点讲就是将t1的内存转移到vector容器中,而不再高昂的代价去拷贝内存!但前提是不需要再访问t1对象了!在执行该代码之后,不可再访问t1对象
3、
#include <vector>
int main(){
std::vector<Teacher> v;
v.emplace_back();
return 0;
}
执行v.emplace_back();这行代码,即默认调用无参构造函数直接构造Teacher的对象。不需要拷贝构造或者移动构造!性能好
总结:能用emplace_back场景尽量使用
下一篇: C语言枚举类型的使用及其优越性
推荐阅读
-
深入解析fsockopen与pfsockopen的区别_PHP教程
-
PHP合并数组+与array_merge的区别分析_php技巧
-
比较全面的event对像在IE与FF中的区别 推荐_javascript技巧
-
详解webpack require.ensure与require AMD的区别_javascript技巧
-
php中++i 与 i++ 的区别_php技巧
-
jquery append()方法与html()方法的区别及使用介绍_jquery
-
接口与抽象类的区别,接口抽象类区别_PHP教程
-
js异步回调Async/Await与Promise的区别,Async/Await替代Promise的6个理由
-
详细分析mybatis中resultType和resultMap的区别与联系
-
php 转换字符串编码 iconv与mb_convert_encoding的区别说明_PHP教程