0

0

c++中如何合并两个vector_c++合并两个容器元素的技巧【实例】

裘德小鎮的故事

裘德小鎮的故事

发布时间:2026-01-21 13:38:02

|

652人浏览过

|

来源于php中文网

原创

最稳妥的方式是用 insert 或 std::copy;std::merge 仅适用于已排序 vector,误用会导致逻辑错误或越界。

c++中如何合并两个vector_c++合并两个容器元素的技巧【实例】

直接用 insertstd::copy 最稳妥,std::merge 仅适用于已排序的 vector,误用会导致逻辑错误或越界。

insert 在末尾追加另一个 vector

这是最常用、最直观的方式,时间复杂度 O(n),内部自动处理内存扩容。

  • 调用 vec1.insert(vec1.end(), vec2.begin(), vec2.end())
  • 不改变 vec2,也不要求两者有序
  • 如果 vec1 容量不足,会触发 reallocation,但对用户透明
  • 注意:不要写成 vec1.insert(vec1.end(), vec2) —— 编译不过,insert 不接受容器整体作为参数
std::vector a = {1, 2};
std::vector b = {3, 4, 5};
a.insert(a.end(), b.begin(), b.end()); // a 变为 {1, 2, 3, 4, 5}

std::copy + back_inserter 实现流式追加

适合需要解耦“源”和“目标”、或配合其他算法的场景,语义更明确,但略冗长。

  • 头文件需包含
  • std::copy(b.begin(), b.end(), std::back_inserter(a))
  • 本质和 insert 效果一致,但每次调用 push_back,可能多次触发容量检查
  • 若确定目标容量足够,可先调用 a.reserve(a.size() + b.size()) 避免重复分配
#include 
#include 
std::vector a = {10, 20};
std::vector b = {30, 40};
a.reserve(a.size() + b.size());
std::copy(b.begin(), b.end(), std::back_inserter(a));

std::merge 合并两个有序 vector

仅当两个 vector 都已升序(或同向有序)时才适用,结果也保持有序。不是“合并”,而是“归并”。

Kive
Kive

一站式AI图像生成和管理平台

下载

立即学习C++免费学习笔记(深入)”;

  • 头文件需包含
  • 目标容器必须预留足够空间:result.resize(a.size() + b.size())
  • 传入的是迭代器范围,不是容器本身;输出迭代器必须可写
  • 若输入无序,结果不可预测,且不会报错 —— 这是最容易踩的坑
std::vector a = {1, 4, 6};
std::vector b = {2, 3, 5, 7};
std::vector result;
result.resize(a.size() + b.size());
std::merge(a.begin(), a.end(), b.begin(), b.end(), result.begin());

避免用 assignswap 做合并

assign 会清空原容器再赋值,swap 是交换而非合并 —— 这两类操作语义不符,强行套用会导致数据丢失或逻辑混乱。

  • vec1.assign(vec2.begin(), vec2.end())vec1 变成 vec2 的副本,原内容全丢
  • vec1.swap(vec2) → 两者内容互换,不是合并
  • 想“把两个 vector 合成一个新 vector”?直接构造:std::vector c(a.begin(), a.end()); c.insert(c.end(), b.begin(), b.end());

真正要注意的是:没有“万能合并函数”,选哪种方式取决于你是否需要保持有序、是否在意性能微差、以及是否在泛型上下文中使用。别只看名字里有“merge”就用 std::merge

相关专题

更多
页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

404

2023.08.14

html编辑相关教程合集
html编辑相关教程合集

本专题整合了html编辑相关教程合集,阅读专题下面的文章了解更多详细内容。

38

2026.01.21

三角洲入口地址合集
三角洲入口地址合集

本专题整合了三角洲入口地址合集,阅读专题下面的文章了解更多详细内容。

19

2026.01.21

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

255

2026.01.21

妖精漫画入口地址合集
妖精漫画入口地址合集

本专题整合了妖精漫画入口地址合集,阅读专题下面的文章了解更多详细内容。

62

2026.01.21

java版本选择建议
java版本选择建议

本专题整合了java版本相关合集,阅读专题下面的文章了解更多详细内容。

3

2026.01.21

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

14

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

6

2026.01.21

无人机驾驶证报考 uom民用无人机综合管理平台官网
无人机驾驶证报考 uom民用无人机综合管理平台官网

无人机驾驶证(CAAC执照)报考需年满16周岁,初中以上学历,身体健康(矫正视力1.0以上,无严重疾病),且无犯罪记录。个人需通过民航局授权的训练机构报名,经理论(法规、原理)、模拟飞行、实操(GPS/姿态模式)及地面站训练后考试合格,通常15-25天拿证。

28

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 4万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号