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 }
复制代码

 

posted @   Happinesspill  阅读(189)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示