C++ emplace_back 与 push_back 详解
一、核心区别对比项push_backemplace_back参数接受一个已存在的对象接受构造函数的参数过程先构造对象再拷贝到容器直接在容器中构造对象效率可能产生临时对象和拷贝零拷贝最高效一句话总结push_back是“插入对象”emplace_back是“就地构造”。二、代码示例对比2.1 基础演示cpp #include iostream #include vector #include string using namespace std; class Student { public: string name; int age; Student(string n, int a) : name(n), age(a) { cout 构造: name endl; } Student(const Student other) : name(other.name), age(other.age) { cout 拷贝构造: name endl; } }; int main() { vectorStudent students; // push_back先构造临时对象再拷贝到容器 cout push_back endl; students.push_back(Student(Alice, 20)); // 输出构造: Alice // 输出拷贝构造: Alice // emplace_back直接在容器中构造无拷贝 cout \n emplace_back endl; students.emplace_back(Bob, 22); // 输出构造: Bob return 0; }2.2 实际应用场景cpp #include vector #include string #include map using namespace std; int main() { // 场景1添加简单类型 vectorint nums; nums.push_back(10); // OK nums.emplace_back(20); // 也可以 // 场景2构造pair推荐emplace_back vectorpairstring, int pairs; pairs.emplace_back(key, 42); // 直接传参高效 pairs.push_back({key, 42}); // 需要花括号构造临时对象 // 场景3复杂对象emplace_back优势明显 vectormapstring, vectorint complexVec; complexVec.emplace_back(); // 构造空map // complexVec.push_back({}); // 也行但会多一次拷贝 // 场景4不可拷贝类型只能用emplace_back vectorunique_ptrint ptrs; ptrs.emplace_back(new int(42)); // OK // ptrs.push_back(new int(42)); // 错误unique_ptr不可拷贝 return 0; }三、使用建议3.1 优先使用 emplace_back 的场景cpp // 1. 需要临时构造对象最常见 vectorstring strs; strs.emplace_back(hello); // 推荐 strs.push_back(hello); // 会产生临时对象 // 2. 多参数构造 struct Point { int x, y; }; vectorPoint points; points.emplace_back(3, 4); // 直接传两个参数 points.push_back({3, 4}); // 需要花括号 // 3. 复杂类型构造 vectorvectorint matrix; matrix.emplace_back(5, 10); // 构造包含10个5的vector matrix.push_back({5, 10}); // 构造包含5和10的vector含义不同3.2 使用 push_back 的场景cpp // 1. 添加已存在的对象语义更清晰 string existing world; vec.push_back(existing); // 明确是拷贝 vec.emplace_back(existing); // 也能工作但push_back更直观 // 2. 使用移动语义时 vec.push_back(std::move(existing)); // 明确表示移动 vec.emplace_back(std::move(existing)); // 也可以四、总结使用场景推荐方法原因临时构造新对象emplace_back避免临时对象效率更高添加已存在的对象push_back语义清晰代码可读性好多参数构造emplace_back代码更简洁不可拷贝类型emplace_back必须使用最佳实践在大多数情况下优先使用emplace_back它更通用且高效。只有在明确需要表达“插入一个已存在的对象”时才使用push_back。

相关新闻

靠谱的GEO解决方案提供商

靠谱的GEO解决方案提供商

我会提供一套通用的GEO解决方案提供商选型标准,以汉赢境界为例进行样本拆解,并与某数据、某GEO进行对比。请注意,本文仅输出选型方法,不做产品推荐。通用选型标准技术实力:参考《人工智能产业发展白皮书》,…

2026/9/17 22:33:23 阅读更多 →
中国大模型包揽全球调用量前五,DeepSeek-V4-Flash 正式版环比增长 570%

中国大模型包揽全球调用量前五,DeepSeek-V4-Flash 正式版环比增长 570%

OpenRouter 上周的周榜更新了。我习惯性扫了一眼前五——第一 DeepSeek-V4-Flash 正式版,第二腾讯 Hy3,第三 DeepSeek-V4-Flash 预览版,第四小米 MiMo V2.5,第五智谱 GLM-5.2。全是国产模型,一个外国名字都没有。 8.83…

2026/9/18 14:37:56 阅读更多 →
链表数据结构:核心概念与高效操作指南

链表数据结构:核心概念与高效操作指南

1. 链表基础与核心概念解析 链表作为数据结构中的经典类型,与数组形成鲜明对比。数组在内存中是连续存储的,而链表则通过指针将零散的内存块串联起来。这种差异直接决定了它们在不同场景下的性能表现。 链表的每个节点通常包含两个部分:数据…

2026/9/14 5:25:43 阅读更多 →

最新新闻

ik_llama.cpp PR 574 技术解析:将 KQ mask 填充对齐从 16 提升到 64,以适配 Vulkan coopmat2 闪存注意力

ik_llama.cpp PR 574 技术解析:将 KQ mask 填充对齐从 16 提升到 64,以适配 Vulkan coopmat2 闪存注意力

ik_llama.cpp PR #574 技术解析:将 KQ mask 填充对齐从 16 提升到 64,以适配 Vulkan coopmat2 闪存注意力 【免费下载链接】ik_llama.cpp llama.cpp fork with additional SOTA quants and improved performance 项目地址: https://gitcode.com/GitHub…

2026/9/20 2:53:07 阅读更多 →
InteractiveViewer在OpenHarmony上的缩放平移实战

InteractiveViewer在OpenHarmony上的缩放平移实战

在 Flutter 应用里做图片预览、画布编辑、地图漫游这类功能时,“内容比视口大”是绕不开的问题。传统做法无非是缩小塞进屏幕,或者用 ScrollView 单向滚动,可一旦需要自由地查看任意区域、放大看细节,就必须引入“缩放 平移 视口…

2026/9/20 2:53:07 阅读更多 →
AI编程助手选型:Copilot替代方案与迁移实战

AI编程助手选型:Copilot替代方案与迁移实战

这两年“Copilot替代工具”在开发者社区的搜索量一路走高,我自己的技术交流群里几乎每周都会有人问一句:“你们还在用Copilot吗?”紧接着就是:“如果不用,那换什么最好?”说实话,这个问题的背后…

2026/9/20 2:53:07 阅读更多 →
CC Switch教程:统一管理DeepSeek、GLM等模型API,搞定Codex与OpenCode配置

CC Switch教程:统一管理DeepSeek、GLM等模型API,搞定Codex与OpenCode配置

最近我在折腾AI辅助编程,手上同时挂着Codex CLI、OpenCode和好几个不同厂商的大模型API。最头疼的不是模型能力,而是配置——每个工具都要单独填Base URL、API Key、模型名,想换个模型就得翻半天设置。直到同事甩给我一个叫CC Switch的开源小…

2026/9/20 2:53:07 阅读更多 →
使用 grpcurl 工具调试 gRPC 服务:反射、查询与调用实战

使用 grpcurl 工具调试 gRPC 服务:反射、查询与调用实战

文档教程 【免费下载链接】advanced-go-programming-book :books: 《Go语言高级编程》开源图书,涵盖CGO、Go汇编语言、RPC实现、Protobuf插件实现、Web框架实现、分布式系统等高阶主题(完稿) 项目地址: https://gitcode.com/gh_mirrors/ad/advanced-go-p…

2026/9/20 2:53:07 阅读更多 →
浮点频率计:等精度测频、Verilog实现与STM32小数位校准

浮点频率计:等精度测频、Verilog实现与STM32小数位校准

简介:面向电子技术、数字电路课程设计场景的浮点频率计设计文档,适合电子信息类专业学生、实验课教师及刚接触数字系统设计的爱好者参考。内容围绕量程达1MHz的浮点式数字频率计展开,依次覆盖技术指标与任务分析、系统框图、秒脉冲电路、节拍…

2026/9/20 2:52:06 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →