C++ 中"emplace_back" 与 "push_back" 的区别

 更新时间:2017年04月01日 08:40:24   投稿:lqh  
这篇文章主要介绍了C++ 中"emplace_back" 与 "push_back" 的区别的相关资料,需要的朋友可以参考下

 C++ 中"emplace_back" 与 "push_back" 的区别

emplace_backpush_back都是向容器内添加数据.

对于在容器中添加类的对象时, 相比于push_back,emplace_back可以避免额外类的复制和移动操作.

"emplace_back avoids the extra copy or move operation required when using push_back."

参见: http://en.cppreference.com/w/cpp/container/vector/emplace_back

注意下面代码中的emplace_back和push_back的添加方式(VS2012下编译通过):

#include <vector> 
#include <string> 
#include <iostream> 
 
struct President 
{ 
  std::string name; 
  std::string country; 
  int year; 
 
  President(std::string p_name, std::string p_country, int p_year) 
    : name(std::move(p_name)), country(std::move(p_country)), year(p_year) 
  { 
    std::cout << "I am being constructed.\n"; 
  } 
  President(President&& other) 
    : name(std::move(other.name)), country(std::move(other.country)), year(other.year) 
  { 
    std::cout << "I am being moved.\n"; 
  } 
  President& operator=(const President& other); 
}; 
 
int main() 
{ 
  std::vector<President> elections; 
  std::cout << "emplace_back:\n"; 
  elections.emplace_back("Nelson Mandela", "South Africa", 1994); //没有类的创建 
 
  std::vector<President> reElections; 
  std::cout << "\npush_back:\n"; 
  reElections.push_back(President("Franklin Delano Roosevelt", "the USA", 1936)); 
 
  std::cout << "\nContents:\n"; 
  for (President const& president: elections) { 
    std::cout << president.name << " was elected president of " 
      << president.country << " in " << president.year << ".\n"; 
  } 
  for (President const& president: reElections) { 
    std::cout << president.name << " was re-elected president of " 
      << president.country << " in " << president.year << ".\n"; 
  } 
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • C++11中的stoi & stod用法

    C++11中的stoi & stod用法

    这篇文章主要介绍了C++11中的stoi & stod用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • C++数据结构与算法的基础知识和经典算法汇总

    C++数据结构与算法的基础知识和经典算法汇总

    终是到了标志着大二结束的期末考试了,对于《算法设计与分析》这门课,我需要总结一下学过的所有算法的思想以及老师补充的关于两个复杂度和递归的概念思想,以及更深层次的理解,比如用画图的方式表达出来,我觉得可以用博客记录总结一下,分享给大家,希望能有所帮助
    2022-05-05
  • C++解决业务办理时间问题示例解析

    C++解决业务办理时间问题示例解析

    这篇文章主要为大家介绍了C++解决业务办理时间问题示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 使用C++实现FTP上传和下载

    使用C++实现FTP上传和下载

    当在Windows上使用C++进行FTP上传和下载时,您可以使用libcurl库来简化操作,本文将为大家详细介绍具体步骤,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • C/C++中CONST用法总结(推荐)

    C/C++中CONST用法总结(推荐)

    这篇文章主要介绍了C/C++中CONST用法总结(推荐),包括const常量与define宏定义的区别介绍,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-07-07
  • C语言调试手段:锁定错误的实现方法

    C语言调试手段:锁定错误的实现方法

    本篇文章是对在C语言调试中,锁定错误的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++面向对象语言自制多级菜单功能实现代码

    C++面向对象语言自制多级菜单功能实现代码

    菜单类主要负责菜单的创建、修改、删除,是包含菜单结构组织和响应函数的模型,用户拥有充分的自主性,可根据需要自定义菜单显示和响应函数,这篇文章主要介绍了C++面向对象语言自制多级菜单,需要的朋友可以参考下
    2024-06-06
  • 浅析string类字符串和C风格字符串之间的区别

    浅析string类字符串和C风格字符串之间的区别

    string类是标准库的类,并不是内置类型,标准库就像是我们自己定义的类差不多的,string类型对象没有标配'\0'结尾的
    2013-09-09
  • C语言编程中生成随机数的入门教程

    C语言编程中生成随机数的入门教程

    这篇文章主要介绍了C语言编程中生成随机数的入门教程,包括利用rand()函数来编写随机数生成器的示例,要的朋友可以参考下
    2015-12-12
  • C++ override关键字使用详解

    C++ override关键字使用详解

    这篇文章主要介绍了C++ override关键字使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01

最新评论