push_back()和emplace_back()函数
参考原文: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()函数相关推荐
- push_back和emplace_back的区别
在引入右值引用,转移构造函数,转移复制运算符之前,通常使用push_back()向容器中加入一个右值元素(临时对象)的时候,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放 ...
- push_back还是emplace_back?
背景和区别 emplace_back() 是 C++11 之后,vector容器中添加的新方法,和 push_back()一样,都是在容器末尾添加一个新的元素,相对于push_back函数,它减少了一 ...
- push_back、emplace_back、std::move
1.push_back和emplace_back的区别 emplace_back() 和 push_back() 的区别: 就在于底层实现的机制不同.push_back() 向容器尾部添加元素时,首先 ...
- C++:vector的push_back()与emplace_back()
在STL中,向vector容器添加元素的函数有2个:push_back().emplace_back() 1.push_back() 在vector容器尾部添加一个元素,用法为: arr.push_b ...
- C++小实验之vector的 push_back 和 emplace_back 及其使用时机
参考 参考一: 如果参数是左值,两个调用的都是copy constructor 如果参数是右值,两个调用的都是move constructor(C++ 11后push_back也支持右值) 最主要的区 ...
- C++的emplace_back函数介绍
C++ STL的vector相信大家一定都知道,它一般用来当做可变长度的列表.在C++11之前,一般给vector插入新元素用得都是push_back函数,比如下面这样: std::vector< ...
- push_back 和 emplace_back 剖析
文章目录 前言 一.源码 二.共同点 三.优化点 总结 前言 仓库推荐 C/C++ 每日一练小仓库,慢慢学习C++ 知识必备仓库 https://github.com/yeshenyong/pract ...
- push_back()和emplace_back()详解
学习链接:C++ STL vector添加元素(push_back()和emplace_back())详解 1. emplace_back C++11新增:与push_back功能相同,在vector ...
- 栈堆的emplace和push_C++姿势点: push_back和emplace_back
网上最常讲的:C++ vector::push_back 会先创建临时对象,然后将临时对象拷贝到容器中,最后销毁临时对象:但是 emplace_back 仅会在容器中原地创建一个对象出来,减少临时对象 ...
最新文章
- 同步、异步 与 串行、并行的区别
- 火箭轨道计算属于什么计算机技术,2018年计算机二级高级Office每日一练 2月27日...
- Map集合HashMap TreeMap的输出方法
- SQL进阶提升(疑惑篇order by)-学习sql server2005 step by step(十一)
- python实现大批量pdf格式论文的重命名与目录制作功能
- unity 渐变消失_Unity3D实现渐变颜色效果|chu
- 【Python数据分析】数据挖掘建模——分类与预测——回归分析
- 浮点数学运算是否被破坏?
- GB28181协议之语音对讲
- 常用快捷键及cmd命令
- Zookeeper特点及理解
- 阿里云服务器密码重置
- 使用者多注意! 多件恶意软件潜入Google Play商店
- 机器学习——统计学三大相关性系数(pearson、spearman、kendall)
- 小学计算机学打字教学教案,小学信息技术《键盘一家》的教学设计
- word方框内插入对勾
- 《深入理解计算机系统》学习记录
- C语言 memcpy和memcpy_s
- ERROR:cannot load flash device description
- DataCom OLT HGU ONU(bridge+other)组播配置指导