[CPP]push_back和emplace_back的区别

emplace_back和push_back是cpp11的新特性之一,都是对vector内添加元素的方法。

区别在于:

push_bach():

首先需要调用构造函数构造一个临时对象,然后调用拷贝构造函数将这个临时对象放入容器中,然后释放临时变量。

emplace_back():

这个元素原地构造,不需要触发拷贝构造和转移构造。

如果使用push_back,由于每次需要调用析构函数,所以理论上emplace_back比push_back更快一点。

原文地址:https://www.cnblogs.com/wildkid1024/p/12411185.html

时间: 2024-11-09 03:17:46

[CPP]push_back和emplace_back的区别的相关文章

c++11 vector使用emplace_back代替push_back

C++11中,针对顺序容器(如vector.deque.list),新标准引入了三个新成员:emplace_front.emplace和emplace_back,这些操作构造而不是拷贝元素.这些操作分别对应push_front.insert和push_back,允许我们将元素放置在容器头部.一个指定位置之前或容器尾部. 当调用push或insert成员函数时,我们将元素类型的对象传递给它们,这些对象被拷贝到容器中.而当我们调用一个emplace成员函数时,则是将参数传递给元素类型的构造函数.em

C++ Primer(一)_标准库_顺序容器

目录 顺序容器 顺序容器 选择什么容器根据业务需求, 研读STL剖析了解底层数据结构, 更加清楚各种优势劣势 零碎点 迭代器被设置为左闭右合带来的编程假设 begin == end,范围为空 begin != end, 至少一个元素 begin可递增至end 两大类型的容器初始化--同类型容器拷贝,迭代器范围拷贝 前者要求容器类型一致 后者只要求元素可转换 两大类型的容器赋值--=号赋值,assign赋值 前者用于列表或同类型容器 后者用于迭代器,初始化列表,(n,elem)方式:限制顺序容器

C++基础之容器

顺序容器简介: 顺序容器类型 描述 vector 可变大小数组,支持快速访问,在尾部之外的地方插入或删除时可能很慢 deque 双端队列.支持快速访问,在头尾插入删除会很快. list 双向列表.只支持双向顺序访问.插入删除很快 forward_list 单向列表.只支持单向顺序访问,在任何位置插入或删除都很快 array 固定大小数组,支持快速随机访问,不能添加删除元素 string 与vector类似,专门用于保存字符.随机访问快,在尾部添加删除快 其中array和forward_list是

【足迹C++primer】26、顺序容器操作

顺序容器操作 向顺序容器添加元素 forward_list //有自己专有版本的insert和emplace: forward_list //不支持push_back和emplace_back vector, string //不支持push_front和emplace_front c.push_back(t), c.emplace_back(args) //在c的尾部创建一个值为t的或者由args创建的元素,返回void c.push_front(t), c.emplace_back(args

static函数与普通函数

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量.全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式.这两者在存储方式上并无不同.这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的. 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它.由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源

Iterator invalidation(迭代器失效)

一.vector 所有读操作.swap.std::swap:都不会引起迭代器失效... clear.operator=.assign:都会引起全部变量迭代器失效 reserve.shrink_to_fit:如果capacity的大小被改变了,则引起全部变量迭代器失效 erase:被删除的变量以及其后面的变量包括end()都迭代器失效 push_back.emplace_back:假如capacity的大小被改变,则引起全部变量迭代器失效.否则只是end()迭代器失效 insert.emplace

Swift数独游戏优化——C++与OC混编、plist自动生成

一.为什么要C++与OC混编? 在我之前的数独游戏中涉及到的数独游戏生成算法是参考的网上其他人的算法,是利用C++来实现的.   但是在我的例子中我发现这样存在一定的局限性: 1.我是利用Terminal的重定向功能来实现输出的,这样不能查看程序的实际运行状态信息. 2.C++编写的代码不能直接生成plist文件,而OC有直接的API可以生成plist文件.(当我前几天刚知道的时候我感觉之前用C++生成plist是有多勇敢)   二.如何进行C++与OC混编? 1.OC文件后缀改为"mm&quo

利用makefile构建c++项目的思路介绍

入门介绍 起因是我在工作中,遇到了一个多个执行文件打包成的组件,而每个执行文件都需要将pb编进二进制中,导致release包非常大.所以想到,是否应该将pb编程动态链接库,再供可执行文件使用呢?达成这个目的需要做两件事.1.将pb编成.so文件.2.将原本的链接方式改为动态链接. makefile是make构建项目所需要的规则文件.通产在其中指定了编译目标.编译指令.编译依赖.通常的makefile被命名为"Makefile""makefile",但也可以通过mak

当谈论迭代器时,我谈些什么?

花下猫语:之前说过,我对于编程语言跟其它学科的融合非常感兴趣,但我还说漏了一点,就是我对于 Python 跟其它编程语言的对比学习,也很感兴趣.所以,我一直希望能聚集一些有其它语言基础的同学,一起讨论共通的语言特性间的话题.不同语言的碰撞,常常能带给人更高维的视角,也能触及到语言的根基,这个过程是极有益的. 这篇文章是群内 樱雨楼 小姐姐的投稿,她是我们学习群里的真·大佬,说到对 Python 的研究以及高阶知识的水平,无人能出其右(群里很多同学都被她实力圈粉啦).除了 Python,她对 C+