参考原文:http://c.biancheng.net/view/6826.html

要知道,向 vector 容器中添加元素的唯一方式就是使用它的成员函数,如果不调用成员函数,非成员函数既不能添加也不能删除元素。这意味着,vector 容器对象必须通过它所允许的函数去访问,迭代器显然不行。

vector 容器提供的所有成员函数,在这些成员函数中,可以用来给容器中添加元素的函数有 2 个,分别是 push_back()emplace_back() 函数。

push_back()函数用法:给vector中添加一个元素

#include <iostream>
#include <vector>
using namespace std;
int main()
{vector<int> values{};values.push_back(1);values.push_back(2);for (int i = 0; i < values.size(); i++) {cout << values[i] << " ";}return 0;
}

输出结果:1 2

emplace_back()函数用法,其功能和 push_back() 相同,都是在 vector 容器的尾部添加一个元素。

#include <iostream>
#include <vector>
using namespace std;
int main()
{vector<int> values{};values.emplace_back(1);values.emplace_back(2);for (int i = 0; i < values.size(); i++) {cout << values[i] << " ";}return 0;
}

输出结果:1 2

区别:
emplace_back() 和 push_back() 的区别,就在于底层实现的机制不同。push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素);而 emplace_back() 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。

显然完成同样的操作,push_back() 的底层实现过程比 emplace_back() 更繁琐,换句话说,emplace_back() 的执行效率比 push_back() 高。因此,在实际使用时,建议大家优先选用 emplace_back()。

由于 emplace_back() 是 C++ 11 标准新增加的,如果程序要兼顾之前的版本,还是应该使用 push_back()。

push_back()和emplace_back()函数相关推荐

  1. push_back和emplace_back的区别

    在引入右值引用,转移构造函数,转移复制运算符之前,通常使用push_back()向容器中加入一个右值元素(临时对象)的时候,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放 ...

  2. push_back还是emplace_back?

    背景和区别 emplace_back() 是 C++11 之后,vector容器中添加的新方法,和 push_back()一样,都是在容器末尾添加一个新的元素,相对于push_back函数,它减少了一 ...

  3. push_back、emplace_back、std::move

    1.push_back和emplace_back的区别 emplace_back() 和 push_back() 的区别: 就在于底层实现的机制不同.push_back() 向容器尾部添加元素时,首先 ...

  4. C++:vector的push_back()与emplace_back()

    在STL中,向vector容器添加元素的函数有2个:push_back().emplace_back() 1.push_back() 在vector容器尾部添加一个元素,用法为: arr.push_b ...

  5. C++小实验之vector的 push_back 和 emplace_back 及其使用时机

    参考 参考一: 如果参数是左值,两个调用的都是copy constructor 如果参数是右值,两个调用的都是move constructor(C++ 11后push_back也支持右值) 最主要的区 ...

  6. C++的emplace_back函数介绍

    C++ STL的vector相信大家一定都知道,它一般用来当做可变长度的列表.在C++11之前,一般给vector插入新元素用得都是push_back函数,比如下面这样: std::vector< ...

  7. push_back 和 emplace_back 剖析

    文章目录 前言 一.源码 二.共同点 三.优化点 总结 前言 仓库推荐 C/C++ 每日一练小仓库,慢慢学习C++ 知识必备仓库 https://github.com/yeshenyong/pract ...

  8. push_back()和emplace_back()详解

    学习链接:C++ STL vector添加元素(push_back()和emplace_back())详解 1. emplace_back C++11新增:与push_back功能相同,在vector ...

  9. 栈堆的emplace和push_C++姿势点: push_back和emplace_back

    网上最常讲的:C++ vector::push_back 会先创建临时对象,然后将临时对象拷贝到容器中,最后销毁临时对象:但是 emplace_back 仅会在容器中原地创建一个对象出来,减少临时对象 ...

最新文章

  1. 同步、异步 与 串行、并行的区别
  2. 火箭轨道计算属于什么计算机技术,2018年计算机二级高级Office每日一练 2月27日...
  3. Map集合HashMap TreeMap的输出方法
  4. SQL进阶提升(疑惑篇order by)-学习sql server2005 step by step(十一)
  5. python实现大批量pdf格式论文的重命名与目录制作功能
  6. unity 渐变消失_Unity3D实现渐变颜色效果|chu
  7. 【Python数据分析】数据挖掘建模——分类与预测——回归分析
  8. 浮点数学运算是否被破坏?
  9. GB28181协议之语音对讲
  10. 常用快捷键及cmd命令
  11. Zookeeper特点及理解
  12. 阿里云服务器密码重置
  13. 使用者多注意! 多件恶意软件潜入Google Play商店
  14. 机器学习——统计学三大相关性系数(pearson、spearman、kendall)
  15. 小学计算机学打字教学教案,小学信息技术《键盘一家》的教学设计
  16. word方框内插入对勾
  17. 《深入理解计算机系统》学习记录
  18. C语言 memcpy和memcpy_s
  19. ERROR:cannot load flash device description
  20. DataCom OLT HGU ONU(bridge+other)组播配置指导

热门文章

  1. jquery版本冲突问题
  2. 自己动手实现简单权限控制
  3. JAVA基础学习day21--IO流三-File、Properties、PrintWriter与合并、分割流
  4. CMake手册详解 (十二)
  5. WCF服务编程(4):《WCF服务编程》第3版中文版翻译结束,即将出版
  6. C# 读写文件方法总结
  7. 基于SSM+Layui+Bootstrap实现学校教师技能大赛评分系统
  8. Java项目:基于SSM实现房屋租赁系统
  9. eruda/vconsole 手机端调试利器
  10. mysql通过ssl的方式生成秘钥