使用insert可直接合并vector,性能好且语法简单;2. std::copy配合back_inserter适用于空目标容器;3. 预分配空间的合并方式推荐用于创建新vector;4. C++17范围操作提供惰性合并视图。

在C++中合并多个vector有多种方法,常用的方式包括使用insert、std::copy结合back_inserter,或C++17以后的std::ranges(如果可用)。下面介绍几种实用且高效的合并方式。
使用 insert 合并 vector
insert 是最直接的方法,可以将一个 vector 的全部元素插入到另一个 vector 的指定位置。
- 适用于任意数量的 vector 合并
- 语法简单,性能较好
示例代码:
Sylius开源电子商务平台是一个开源的 PHP 电子商务网站框架,基于 Symfony 和 Doctrine 构建,为用户量身定制解决方案。可管理任意复杂的产品和分类,每个产品可以设置不同的税率,支持多种配送方法,集成 Omnipay 在线支付。功能特点:前后端分离Sylius 带有一个强大的 REST API,可以自定义并与您选择的前端或您的微服务架构很好地配合使用。如果您是 Symfony
#include#include int main() { std::vector v1 = {1, 2, 3}; std::vector v2 = {4, 5, 6}; std::vector v3 = {7, 8, 9}; // 合并 v2 到 v1 v1.insert(v1.end(), v2.begin(), v2.end()); // 合并 v3 到 v1 v1.insert(v1.end(), v3.begin(), v3.end()); for (int x : v1) { std::cout << x << " "; } // 输出: 1 2 3 4 5 6 7 8 9 return 0; }
使用 std::copy 和 back_inserter
这种方法更通用,尤其适合与其他容器或算法配合使用。
立即学习“C++免费学习笔记(深入)”;
- 需要包含
gorithm> 和 - 适用于目标 vector 初始为空的情况
示例代码:
#include#include #include std::vector result; std::vector v1 = {1, 2}, v2 = {3, 4}, v3 = {5, 6}; std::copy(v1.begin(), v1.end(), std::back_inserter(result)); std::copy(v2.begin(), v2.end(), std::back_inserter(result)); std::copy(v3.begin(), v3.end(), std::back_inserter(result));
合并多个 vector 到新 vector(推荐做法)
如果你不想修改原始 vector,可以创建一个新的 vector,并预分配空间以提升性能。
std::vectorv1 = {1, 2}; std::vector v2 = {3, 4}; std::vector v3 = {5, 6}; // 计算总大小 size_t total_size = v1.size() + v2.size() + v3.size(); std::vector merged; merged.reserve(total_size); // 避免多次内存分配 merged.insert(merged.end(), v1.begin(), v1.end()); merged.insert(merged.end(), v2.begin(), v2.end()); merged.insert(merged.end(), v3.begin(), v3.end());
使用 reserve() 可显著提高性能,特别是当 vector 较大时。
使用 C++17 范围(可选)
C++23 引入了更现代的范围操作,但目前大多数项目仍使用 C++17 或 C++14。若环境支持,可尝试使用 std::ranges::join_view 实现惰性合并(不立即复制数据)。
注意:这是只读视图,不生成新 vector。
基本上就这些常见方法。insert 最常用也最高效,搭配 reserve 能避免不必要的内存重分配。










