讲师中心 微信公众号

工具推荐

视频效率加速
立刻MV
立刻MV

低成本歌曲 MV、视频生成

剧云
剧云

中文短剧剧本制作平台

Laper
Laper

剧本策划到成片协作

Seko
Seko

AI短剧一键生成成片

C++ list merge用法 C++ 合并两个有序链表【STL】

雨浩姑娘_6867

雨浩姑娘_6867

发布时间:2026-01-31 11:36:07

|

499人浏览过

|

来源于php中文网

原创

list::merge仅合并已按相同规则排序的另一list,不支持vector等其他容器,也不执行排序,仅归并;若结果乱序,通常因被合并list未排序或排序规则不一致。

c++ list merge用法 c++ 合并两个有序链表【stl】

list::merge 只接受另一个 list 且要求已排序

list::merge 不是通用合并函数,它只支持将另一个 std::list 合并进当前 list,并且**两个 list 都必须已按相同规则升序排列**(或都降序)。它不接受 vector、array 或裸指针链表;也不做排序,只做归并(merge),类似归并排序中的 merge 步骤。

常见错误现象:list1.merge(list2) 后结果乱序 → 很可能 list2 本身未排序,或两 list 排序规则不一致(比如一个用 ,另一个用自定义比较器但没传给 merge)。

  • 调用前确保 list2 已排序,且与 list1 使用同一比较逻辑
  • 若需不同排序规则,必须显式传入比较器: list1.merge(list2, std::greater<int>())</int>
  • list2 在 merge 后变为空 —— 这是标准行为,所有节点被移入 list1

merge 后原 list2 为空,不能重复使用

这是最容易忽略的副作用。list::merge 是“移动式”合并:它把 list2 的所有节点直接拼接到 list1 中,不复制节点,也不保留 list2 的内容。执行后 list2.empty() 必为 true。

如果你误以为 list2 还能继续参与下一次 merge(比如循环中反复合并),程序会逻辑错误——后续调用实际在合并一个空 list。

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

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
  • 需要复用数据时,要么重新构造 list2,要么改用 std::merge 算法(输出到第三方容器)
  • 调试时可加断言验证:assert(list2.empty());
  • 注意:即使传了比较器,list2 仍会被清空

和 std::merge 算法的关键区别

std::merge(在 <algorithm></algorithm> 中)是更通用的归并函数,适用于任意有序范围(如两个 vector 的区间),但它**不修改输入容器,而是将结果写入目标迭代器**;而 list::merge 是成员函数,就地修改 *this,并清空参数 list。

使用场景差异:

  • 想保持两个源 list 不变?用 std::merge(l1.begin(), l1.end(), l2.begin(), l2.end(), back_inserter(result))
  • 想节省内存、避免复制节点,且允许 list2 被清空?用 l1.merge(l2)
  • std::merge 要求输出容器有足够空间或支持插入(如 std::back_inserter),list::merge 则无此负担

自定义类型必须提供可比性或显式传比较器

如果 list<myclass></myclass> 调用 merge,编译器需要能比较两个 MyClass 对象。默认情况下,它依赖 operator;若未定义,或你想用其他逻辑(如按 id 升序、按 name 降序),就必须传比较器。

错误示例:my_list.merge(other_list); 编译失败,提示 “no match for ‘operator

  • 补全 operator:在 <code>MyClass 中声明 bool operator
  • 或调用时传 lambda:list1.merge(list2, [](const auto& a, const auto& b) { return a.id
  • 注意:该比较器必须与两个 list 当前的元素顺序一致,否则结果未定义

真正要注意的是:merge 不检查排序正确性,只按你给的比较逻辑线性归并。哪怕 list 看似有序但违反了你传的比较器语义(比如比较器用 > 但 list 实际按 排),结果一定错,而且很难 debug。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
C++ 智能指针与现代内存管理
C++ 智能指针与现代内存管理

深入讲解 C++ 现代内存管理的核心工具——智能指针,涵盖 unique_ptr 独占所有权语义、shared_ptr 引用计数机制与循环引用问题、weak_ptr 弱引用的应用场景、make_unique/make_shared 工厂函数的性能优势、自定义删除器的编写、RAII 资源管理思想的实践,以及从裸指针迁移到智能指针的重构策略,帮助开发者编写安全无泄漏的现代 C++ 代码。

379

2026.04.23

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

60

2026.11.06

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

40

2026.11.06

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

40

2026.11.06

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

60

2026.11.05

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

40

2026.11.05

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

60

2026.11.04

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

60

2026.11.04

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

40

2026.11.04

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn