美文网首页
C++优化:使用emplace

C++优化:使用emplace

作者: fck_13 | 来源:发表于2020-04-26 00:02 被阅读0次

场景:向一个vector末尾插入一个元素,一般我们使用的函数是push_back,代码如下:

#include <iostream>
#include <vector>

class ComplexClass{
public:
  ComplexClass(){
    std::cout<<"Constructor"<<std::endl;
  }
  ~ComplexClass(){
    std::cout<<"Destructor"<<std::endl;
  }
private:
  //some data member
};

int main(){
  std::vector<ComplexClass> vec;
  vec.push_back(ComplexClass());
  return 0;
}

执行上述的代码,结果如下:

Constructor
Destructor
Constructor
Destructor

为了在一个vector的末尾添加一个元素,C++竟然将这个元素构建了两次,这两次分别是:

  • 在栈上构建这个对象
  • 将这个对象以参数传入push_back的时候还要构建一次
    这明显是不可接受的,为了解决这个问题,C++11引入了emplace_back,该函数的作用是直接在emplace_back中构建对象,而不是以参数的形式传入。所以这个函数的实际参数是可以构建对象的构造函数的参数。由于ComplexClass 的构造函数是没有参数的,所以,上述的代码可以修改为
vec.emplace_back();

代码修改后的运行结果为:

Constructor
Destructor

相关文章

  • C++优化:使用emplace

    场景:向一个vector末尾插入一个元素,一般我们使用的函数是push_back,代码如下: 执行上述的代码,结果...

  • 018 使用 emplace 操作

    C++ 11 引入了三个新成员 —— emplace_front、emplace 和 emplace_back,这...

  • c++ emplace_back

    概述 为了在容器操作时尽可能的减少构造函数的调用和内存的拷贝,C++11 引入了emplace_back的方法,该...

  • 如何让glog性能提高10倍

    摘要:优化glog源码,性能提高10倍 背景 最近在给glog做性能优化, 使用c++版本 glog-0.3.4做...

  • 右值引用

    C++11使用emplace_back代替push_back[https://www.cnblogs.com/li...

  • emplace/emplace_back

    emplace_back/emplace等能通过参数直接在容器中构造对象,相比push_back/insert能更...

  • emplace相关知识点总结

    1 emplace与insert的异同 1.1 相同点 将容器中插入新成员 emplace是C++11新标准引入了...

  • 优化算法matlab实现(一)相关matlab基础

    之前实现优化算法用的java、python、c++,matlab使用较少,接下来会用matlab来实现。此处记录了...

  • 一、python下opencv 安装

    OpenCV是一个计算机视觉库,使用高度优化的C/ c++代码编写,支持windows、linux、android...

  • coco2d-x v3.0 亮点

    v3.0 亮点 @来自官网 使用 C++(C++11) 的特性取代了 Objective-C 的特性优化了 Lab...

网友评论

      本文标题:C++优化:使用emplace

      本文链接:https://www.haomeiwen.com/subject/fmqrwhtx.html