当前位置: 首页 > news >正文

STL----push,insert,empalce

push_back和emplace_back的区别

#include <iostream>
#include <vector>using namespace std;
class testDemo {
public:testDemo(int n) :num(n) {cout << "构造函数" << endl;}testDemo(const testDemo& other) :num(other.num) {cout << "拷贝构造函数" << endl;}testDemo(testDemo&& other) :num(other.num) {cout << "移动拷贝构造函数" << endl;}
private:int num;
};int main() {vector<testDemo> vec{};cout << "push_back:" << endl;vec.push_back(1);cout << endl;vector<testDemo> vec1{};cout << "第一个元素empalce_back:" << endl;vec1.emplace_back(1);cout << endl;cout << "不是第一个元素empalce_back:" << endl;vec1.emplace_back(2);return 0;
}

所以emplace_back()的高效好像只体现在第一个元素。

所以说empalce不拷贝,不完全正确。

list和vector的front和back

list既有push_back,push_front,也有emplace_back(),emplace_front().

vector只有psuh_back和emplace_back()。

insert和empalce

都是在指定的位置插入一个元素。

原理

#include <iostream>
#include <vector>
using namespace std;
class testDemo {
public:testDemo(int n) :num(n) {cout << "构造函数" << endl;}testDemo(const testDemo& other) :num(other.num) {cout << "拷贝构造函数" << endl;}testDemo(testDemo&& other) :num(other.num) {cout << "移动拷贝构造函数" << endl;}testDemo& operator=(const testDemo& other);
private:int num;
};
/*
为什么一定要重载这个函数:
1,自定义类型,这个函数不是默认生成的;
2,emplace和insert内部实现需要这个函数
*/
testDemo& testDemo::operator=(const testDemo& other) {this->num = other.num;cout << "重载" << endl;return *this;
}
int main() {vector<testDemo> vec{};cout << "第一个元素emplace:" << endl;vec.emplace(vec.begin(), 2);cout << endl;cout << "不是第一个元素emplace:" << endl;vec.emplace(vec.begin() + 1, 3);cout << endl;cout << "insert:" << endl;vec.insert(vec.begin(), 2);return 0;
}

总结:

emplace以及empalce_back除非第一个元素不拷贝,之后的元素加入和push和push_back差不多,都需要拷贝。

http://www.lryc.cn/news/349336.html

相关文章:

  • 解决OpenHarmony设备开发Device Tools工具的QUICK ACCESS一直为空
  • k8s拉起一个pod底层是如何运行的
  • Java代理模式的实现详解
  • 数据结构与算法===优先队列
  • HTML常用标签-超链接标签
  • 财务管理|基于SprinBoot+vue的财务管理系统(源码+数据库+文档)
  • 快速学习SpringAi
  • 谈谈 Spring 的过滤器和拦截器
  • 请介绍下H264的多参考帧技术及其应用场景,并请说明下为什么要有多参考帧?
  • 第6章 Elasticsearch,分布式搜索引擎【仿牛客网社区论坛项目】
  • odoo 全局调整list_controller中默认方法(form_controller和kanban_controller等亦可以同样操作)
  • 大模型日报2024-05-13
  • 【使用Condition来模拟生产消费】
  • 5.14学习总结
  • 最新极空间部署iCloudpd教程,实现自动同步iCloud照片到NAS硬盘
  • Sketch总结
  • 【iOS】工厂模式
  • 目标检测算法YOLOv6简介
  • 如何修复显示器或笔记本电脑屏幕的黄色色调?这里提供几种方法
  • 5.14 力扣每日一题 贪心
  • wordpress 访问文章内容页 notfound
  • 【Python探索之旅】列表
  • 搜维尔科技:深入探讨Varjo XR头显在汽车行业的可能性
  • YOLOv8预测流程-原理解析[目标检测理论篇]
  • TCP超时重传机制
  • Oracle 的 RMAN(Recovery Manager) 和 DM(达梦数据库)的 DMRman异同
  • HVV面试题2024护网蓝队面试题
  • 算法题--华为od机试考试(组成最大数、第k个排列、最小传输时延)
  • 2024 年最新本地、云服务器安装部署 miniconda 环境详细教程(更新中)
  • Python进行excel处理-01