C++ STL 中的 list merge() 函数

c++server side programmingprogramming

本文将讨论 C++ 中 list::merge() 函数的工作原理、语法和示例。

STL 中的 List 是什么?

List 是一种数据结构,允许在任意位置以恒定时间顺序插入和删除元素。List 实现为双向链表。List 允许非连续的内存分配。List 在插入、提取和在容器中任意位置移动元素方面比数组、向量和双端队列表现更好。在 List 中,直接访问元素速度较慢,并且 List 与 forward_list 类似,但 Forward List 对象是单链表,只能向前迭代。

什么是 list::merge()?

list::merge() 是 C++ STL 中的一个内置函数,在 <list> 头文件中声明。merge() 用于将两个 List 合并为一个。我们可以简单地合并两个列表,或者如果我们想要额外的比较,也可以添加一个比较器。

在合并两个列表之前,我们必须确保列表是按顺序排列的。如果没有传递比较器,它会将两个列表合并为一个排序列表。如果我们还需要在两个列表之间进行内部比较,则必须添加比较器。

语法

list_container1.merge(list_container2); //将合并 list_container1 中的两个列表
list_container1.merge(list_container2, comparator);

此函数可以接受一个或两个参数 −

参数

  • list_container2 −这是待合并的第二个列表的对象

  • 比较器 − 定义了一个内部比较函数。这是一个二元谓词,包含两个与列表容器中定义值相同的输入。如果 list_container1 元素被认为位于 list_container2 之前,则返回 true,否则返回 false。

返回值

此函数不返回任何内容。

不使用比较器

示例

在下面的代码中,我们创建了两个已排序的列表,任务是合并这两个列表,并且生成的输出也应该是已排序的。

#include <bits/stdc++.h>
using namespace std;
int main(){
   //创建排序列表
   list<int> myList_1 = {2, 4, 6, 8 };
   list<int> myList_2 = {1, 3, 5, 7 };
   //使用merge()函数合并列表
   myList_2.merge(myList_1);
   cout <<"合并后的列表:";
   for(auto i = myList_2.begin(); i != myList_2.end(); ++i)
      cout << *i << " ";
   return 0;
}

示例

如果我们运行上述代码,它将生成以下输出

合并后的列表:1 2 3 4 5 6 7 8

使用比较器

示例

在下面的代码中,我们必须合并两个列表,然后将生成的列表排序作为最终输出。

#include <bits/stdc++.h>
using namespace std;
bool compare(int myList_1, int myList_2){
   return ( int(myList_1)<int(myList_2) );
}
int main(){
   //创建列表
   list<int> myList_1 = {2, 4, 1 };
   list<int> myList_2 = {7, 6, 5 };
   myList_1.sort();
   myList_2.sort();
   //使用merge()函数合并列表
   myList_1.merge(myList_2);
   myList_2.push_back (3);
   myList_1.merge(myList_2,compare);
   cout<<"List Elements are : ";
   for(auto i = myList_1.begin(); i!=myList_1.end(); ++i)
      cout<< ' ' << *i;
   return 0;
}

输出

如果我们运行上述代码,它将生成以下输出

List Elements are : 1 2 3 4 5 6 7

相关文章