c++中容器定义了很多操作。其中有6种操作:
emplace_front,emplace,emplace_back;
push_front,insert,push_back
都可以向容器中添加元素,但是其中又有很大的区别。下面有一程序:

#include<iostream>
#include<vector>
#include<string>
using namespace std;class Dog
{
public:string name;int age;
public:Dog(string n, int a) :name(n), age(a){ };Dog(string n) :name(n), age(0){ cout << "调用了构造函数" << endl; };Dog() = default;
};int main()
{vector<Dog> q;q.push_back("2ha");for (auto a : q){cout << a.name << ' ' << a.age << endl;}getchar();
}

为了方便查看结果,我将所有成员都设置成了公共的。
VS2013编译时会在q.push_back(“2ha”); 报错
我将程序中的q.push_back(“2ha”);改成了q.emplace_back(“2ha”);
程序编译通过。运行结果是

这说明emplace是调用构造函数,直接在容器中构造一个元素。
而insert,push是拷贝操作,将元素拷贝到容器中。

emplace与insert相关推荐

  1. std::map emplace和insert使用

    插入结构体时,emplace比insert少一次拷贝构造,推荐使用emplace // map_emplace.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结 ...

  2. 【c++】8.map和vector容器查找、删除指定元素、emplace、insert

    1.查找与删除 vector 和 map 容器中指定元素 vector 查找或删除vector的指定元素"123" 方法1:使用迭代器 不同于map(map有find方法),vec ...

  3. emplace_back/emplace 与 push_back/insert 效率的详细比较

    在 STL 的容器中,除了给 vector 等序列容器定义了push_back方法之外,还定义了emplace_back方法: 除了给 map 等关联容器定义了insert方法外,还定义了emplac ...

  4. C++优化之使用emplace

    在C++开发过程中,我们经常会用STL的各种容器,比如vector,map,set等,这些容器极大的方便了我们的开发.在使用这些容器的过程中,我们会大量用到的操作就是插入操作,比如vector的pus ...

  5. C++优化之使用emplace、emplace_back

    在C++开发过程中,我们经常会用STL的各种容器,比如vector,map,set等.在使用这些容器的过程中,我们会大量用到的操作就是插入操作,比如vector的push_back,map的inser ...

  6. c++11 emplace

    template <class... Args> pair<iterator, bool> emplace ( Args&&... args ); emplac ...

  7. C++的emplace

    一.背景 在C++开发过程中,我们经常会用STL的各种容器,比如vector,map,set等,这些容器极大的方便了我们的开发.在使用这些容器的过程中,我们会大量用到的操作就是插入操作,比如vecto ...

  8. C++ 那些被遗漏的细节2 map emplace emplace_hint

    说明 主要关注map的emplace.insert的返回类型 std::pair<iterator, bool> 和 emplace_hint的返回类型iterator. template ...

  9. C++ STL deque容器添加和删除元素方法完全攻略

    deque 容器中,无论是添加元素还是删除元素,都只能借助 deque 模板类提供的成员函数.表 1 中罗列的是所有和添加或删除容器内元素相关的 deque 模板类中的成员函数. 表 1 和添加或删除 ...

最新文章

  1. Linked list(单链表)
  2. C 语言编程 — 编程实践
  3. 【oracle】sqlnet.ora 访问控制策略
  4. Android --- Binary XML file line2 Binary XML file line 2 Error inflating class unknown
  5. webpack之optimization.runtimeChunk作用
  6. Windows中使用Python和C/C++联合开发应用程序起步
  7. dotnet 通过引用 msbuild 程序集实现自己定制编译器
  8. linux一键安装node+npm
  9. 07-02 测试报告-allure
  10. vasp如何杀掉任务_如何优雅地在学堂路上骑着车跑代码
  11. LINUX使用C调用LMDB的方法
  12. python基于Suprise模块构建推荐算法模型,实现电影、书籍等资源的推荐
  13. html5中的function,js中function函数的使用方法
  14. C++ MFC 大湿兄作品!游戏自动跳跳防AFK 支持 自动按空格 取消 隐藏以及显示游戏。方便在公司玩。支持最小化到托盘 魔兽世界防AFK掉线
  15. 小米面试offer加油
  16. SAP UI5 应用开发教程之六十九 - 如何从 SAP UI5 Not Found 页面跳转回到正常的应用页面试读版
  17. 计算机专业必要要买游戏本吗,吾空:致大学想买游戏笔记本的学生,这几个点必须要知道...
  18. 238页(15万字)BH XXX县10MW渔光互补可研报告_V1.1
  19. 暑期练习web25:web code(i春秋)index.php文件包含、base64图片加密
  20. 商汤科技创业资源及来源分析思维导图

热门文章

  1. BootstrapTable(附源码) Bootstrap结合BootstrapTable的使用,分为两种模试显示列表。...
  2. tablefunc 行转列
  3. Android 基本事件及对话框
  4. Sql语句中 case when .. 的两种写法
  5. [导入]用Javascript实现interface的类似功能
  6. 操作系统实验报告12:线程2
  7. C语言中能运算符重载吗,C++语言中什么运算符不能重载
  8. 【数据结构与算法】之链表的操作和使用
  9. 2021年第十二届蓝桥杯 - 省赛 - C/C++大学C组 - D.相乘
  10. 年薪201万的华为“天才少年”曾是三本复读生,逆袭就是抓住每一次提升自己的机会