标签:11 emplace back ret 报错 push 构造函数
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 }
标签:11,emplace,back,ret,报错,push,构造函数 来源: https://www.cnblogs.com/happinesspills/p/16357268.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。