C++11 新特性----emplace_back()
2022/6/9 1:20:26
本文主要是介绍C++11 新特性----emplace_back(),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
C++11新加入了emplace_back()用来替换push_back():
push_back()方法要调用构造函数和复制构造函数,这也就代表着要先构造一个临时对象,然后把临时的copy构造函数拷贝或者移动到容器最后面。
而emplace_back()在实现时,则是直接在容器的尾部创建这个元素,省去了拷贝或移动元素的过程。
1 vector<pair<int, int>> ret; 2 ret.push_back(1, 1); //会报错,因为没有构造一个临时对象 3 ret.push_back(pair(1, 1)); //不会报错,因为构成了一个pair对象 4 ret.emplace_back(1, 1); //不会报错,因为直接在容器的尾部创建对象
1 #include<bits/stdc++.h> 2 using namespace std; 3 int i=0,j=0; 4 class A { 5 public: 6 A(int i){ 7 str = to_string(i); 8 cout << "构造函数" <<++i<< endl; 9 } 10 ~A(){} 11 A(const A& a): str(a.str){ 12 cout << "拷贝构造" <<++j<< endl; 13 } 14 15 public: 16 string str; 17 }; 18 19 int main(){ 20 vector<A> vec; 21 vec.reserve(10); //开辟capacity 22 for(int i=0;i<10;i++){ 23 vec.push_back(i); //调用了10次构造函数和10次拷贝构造函数, 24 // vec.emplace_back(i); //调用了10次构造函数 不调用拷贝构造函数 25 } 26 }
这篇关于C++11 新特性----emplace_back()的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升