C ++ STL中的forward_list merge()

在本文中,我们将讨论C ++中forward_list::merge()函数的工作,语法和示例。

什么是STL中的Forward_list?

转发列表是序列容器,允许在序列中的任何位置进行恒定时间的插入和擦除操作。转发列表被实现为单链接列表。通过与到序列中下一个元素的链接的每个元素的关联来保持顺序。

什么是forward_list::merge()?

forward_list::merge()是C ++ STL中的内置函数,在头文件中声明。merge()用于将两个已排序的forward_list合并为一个。 

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

语法

flist_container1.merge(flist_container2); //will merge both lists
flist_container1.merge(flist_container2, comparator);

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

参数

  • list_container2-这是要合并的第二个列表的对象

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

返回值

此函数不返回任何内容。

示例

/ *在下面的代码中,我们正在创建两个转发列表,并且都对它们进行了排序,任务是使用merge()应该排序的C ++中的函数将它们合并* /

#include <bits/stdc++.h>
using namespace std;
int main() {
   //通过插入排序的值来创建转发列表
   forward_list<int> myForwardList1 = { 1, 3, 5, 7 };
   forward_list<int> myForwardList2 = { 2, 4, 6 };
   //合并两个排序的转发列表
   myForwardList1.merge(myForwardList2);
   cout << "elements after merging" << endl;
   for (auto i = myForwardList1.begin(); i != myForwardList1.end(); ++i)
      cout << *i << " ";
   return 0;
}

输出结果

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

elements after merging
1 2 3 4 5 6 7

带比较器

示例

/ *在下面的代码中,我们将创建两个转发列表,并且都未排序,任务是首先对列表进行排序,然后使用merge()C ++中的函数将它们合并,并且应该对其进行排序。* /

#include <bits/stdc++.h>
using namespace std;
int main (){
   //创建未排序的转发列表
   forward_list<int> myForwardList1 = {3, 2, 9};
   forward_list<int> myForwardList2 = {8, 1, 2};
   //sorting the forward list using sort() function
   myForwardList1.sort();
   myForwardList2.sort();
   myForwardList1.merge(myForwardList2);
   cout << "Elements after merging" << endl;
   for (auto i = myForwardList1.begin(); i != myForwardList1.end(); ++i)
      cout << *i << " ";
   return 0;
}

输出结果

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

Elements after merging
1 2 2 3 8 9