C++ STL 中的 forward_list merge()
c++server side programmingprogramming更新于 2025/4/23 16:07:17
在本文中,我们将讨论 C++ 中 forward_list::merge() 函数的工作原理、语法和示例。
STL 中的 Forward_list 是什么?
前向列表是序列容器,允许在序列中的任何位置进行常量时间插入和删除操作。前向列表实现为单链表。顺序由与序列中下一个元素的链接的每个元素的关联来保持。
什么是 forward_list::merge()?
forward_list::merge() 是 C++ STL 中的内置函数,在头文件中声明。merge() 用于将两个排序的 forward_list 合并为一个。
在合并两个列表之前,我们必须确保列表是按排序顺序排列的。如果没有传递比较器,则它会将两个列表合并为一个排序列表。当我们还想在两个列表之间进行内部比较时,必须添加比较器。
语法
flist_container1.merge(flist_container2); //将合并两个列表 flist_container1.merge(flist_container2, comparator);
此函数可以接受一个或两个参数 −
参数
list_container2 − 这是要合并的第二个列表的对象
比较器 − 这定义了一个内部比较。这是一个二元谓词,包含两个与列表容器中定义的值相同的输入,如果 list_container1 元素被认为位于 list_container2 之前,则返回 true,否则返回 false。
返回值
此函数不返回任何内容。
示例
/* 在下面的代码中,我们创建了两个前向列表,并且都已排序,任务是使用 C++ 中的 merge() 函数将它们合并,该函数应该已排序 */
#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
使用比较器
示例
/* 在下面的代码中,我们创建了两个前向列表,并且它们都是未排序的,任务是先对列表进行排序,然后使用 C++ 中的 merge() 函数合并它们,并且应该进行排序。 */
#include <bits/stdc++.h> using namespace std; int main (){ //创建未排序的前向列表 forward_list<int> myForwardList1 = {3, 2, 9}; forward_list<int> myForwardList2 = {8, 1, 2}; //使用sort()函数对前向列表进行排序 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