0

0

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

尼克

尼克

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

|

479人浏览过

|

来源于php中文网

原创

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

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

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

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

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

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

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

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

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

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

QIMI奇觅
QIMI奇觅

美图推出的游戏行业广告AI制作与投放一体化平台

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

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

std::merge(在 中)是更通用的归并函数,适用于任意有序范围(如两个 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 调用 merge,编译器需要能比较两个 MyClass 对象。默认情况下,它依赖 operator;若未定义,或你想用其他逻辑(如按 id 升序、按 name 降序),就必须传比较器。

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

  • 补全 operator:在 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助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

12

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

6

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

10

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

1

2026.01.31

漫画防走失登陆入口大全
漫画防走失登陆入口大全

2026最新漫画防走失登录入口合集,汇总多个稳定可用网址,助你畅享高清无广告漫画阅读体验。阅读专题下面的文章了解更多详细内容。

7

2026.01.31

php多线程怎么实现
php多线程怎么实现

PHP本身不支持原生多线程,但可通过扩展如pthreads、Swoole或结合多进程、协程等方式实现并发处理。阅读专题下面的文章了解更多详细内容。

1

2026.01.31

php如何运行环境
php如何运行环境

本合集详细介绍PHP运行环境的搭建与配置方法,涵盖Windows、Linux及Mac系统下的安装步骤、常见问题及解决方案。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php环境变量如何设置
php环境变量如何设置

本合集详细讲解PHP环境变量的设置方法,涵盖Windows、Linux及常见服务器环境配置技巧,助你快速掌握环境变量的正确配置。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php图片如何上传
php图片如何上传

本合集涵盖PHP图片上传的核心方法、安全处理及常见问题解决方案,适合初学者与进阶开发者。阅读专题下面的文章了解更多详细内容。

2

2026.01.31

热门下载

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

精品课程

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

共94课时 | 8万人学习

C 教程
C 教程

共75课时 | 4.3万人学习

C++教程
C++教程

共115课时 | 14.9万人学习

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

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