C++ <list> merge 函数
merge 是 list 中用于合并两个已排序链表的函数,是链表特有的高效操作。
merge 是容器类的成员函数,用于将另一个已排序的链表合并到当前链表中。
合并后,两个链表的元素会按照顺序合并,当前链表变为有序。
单词释义: merge 表示"合并",即合并两个有序链表。
基本语法与参数
语法格式
void merge(list& other); void merge(list& other, Compare comp);
参数说明
- 参数:
other- 要合并的链表(将被清空)
函数说明
- 返回值:
void(无返回值)。 - 效果: 合并两个有序链表,
other变为空。
实例
示例 1:合并两个有序链表
实例
#include <iostream>
#include <list>
int main() {
std::list<int> list1 = {1, 3, 5, 7, 9};
std::list<int> list2 = {2, 4, 6, 8, 10};
std::cout << "list1: ";
for(int n : list1) std::cout << n << " ";
std::cout << std::endl;
std::cout << "list2: ";
for(int n : list2) std::cout << n << " ";
std::cout << std::endl;
// 合并
list1.merge(list2);
std::cout << "合并后 list1: ";
for(int n : list1) std::cout << n << " ";
std::cout << std::endl;
std::cout << "合并后 list2 大小: " << list2.size() << std::endl;
return 0;
}
#include <list>
int main() {
std::list<int> list1 = {1, 3, 5, 7, 9};
std::list<int> list2 = {2, 4, 6, 8, 10};
std::cout << "list1: ";
for(int n : list1) std::cout << n << " ";
std::cout << std::endl;
std::cout << "list2: ";
for(int n : list2) std::cout << n << " ";
std::cout << std::endl;
// 合并
list1.merge(list2);
std::cout << "合并后 list1: ";
for(int n : list1) std::cout << n << " ";
std::cout << std::endl;
std::cout << "合并后 list2 大小: " << list2.size() << std::endl;
return 0;
}
运行结果预期:
list1: 1 3 5 7 9 list2: 2 4 6 8 10 合并后 list1: 1 2 3 4 5 6 7 8 9 10 合并后 list2 大小: 0
示例 2:合并后 list2 被清空
实例
#include <iostream>
#include <list>
int main() {
std::list<int> a = {1, 5, 6};
std::list<int> b = {2, 3, 4, 7};
a.merge(b);
std::cout << "合并后: ";
for(int n : a) std::cout << n << " ";
std::cout << std::endl;
std::cout << "b 是否为空: " << (b.empty() ? "是" : "否") << std::endl;
return 0;
}
#include <list>
int main() {
std::list<int> a = {1, 5, 6};
std::list<int> b = {2, 3, 4, 7};
a.merge(b);
std::cout << "合并后: ";
for(int n : a) std::cout << n << " ";
std::cout << std::endl;
std::cout << "b 是否为空: " << (b.empty() ? "是" : "否") << std::endl;
return 0;
}
运行结果预期:
合并后: 1 2 3 4 5 6 7 b 是否为空: 是

C++ 容器类 <list>