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


在本文中,我們將討論 C++ 中 list::merge() 函式的工作原理、語法和示例。

什麼是 STL 中的 List?

List 是一種資料結構,允許在序列中的任何位置進行常數時間的插入和刪除操作。列表實現為雙向連結串列。列表允許非連續記憶體分配。與陣列、向量和雙端佇列相比,列表在容器中任何位置執行元素的插入、提取和移動操作的效率更高。在列表中,直接訪問元素的速度很慢,列表類似於 forward_list,但 forward_list 物件是單向連結串列,只能向前迭代。

什麼是 list::merge()?

list::merge() 是 C++ STL 中一個內建函式,宣告在 <list> 標頭檔案中。merge() 用於將兩個列表合併成一個。我們可以簡單地合併兩個列表,或者如果需要額外的比較,我們還可以新增一個比較器。

在合併兩個列表之前,我們必須確保列表已排序。如果沒有傳遞比較器,則它會將兩個列表合併成一個排序後的列表。如果我們還需要兩個列表之間的內部比較,則必須新增比較器。

語法

list_container1.merge(list_container2); //will merge both lists in list_container1
list_container1.merge(list_container2, comparator);

此函式可以接受一個或兩個引數:

引數

  • list_container2 − 這是要合併的第二個列表的物件

  • comparator − 定義內部比較。這是一個二元謂詞,包含兩個與列表容器中定義的相同值的輸入,如果 list_container1 元素被認為在 list_container2 之前,則返回 true,否則返回 false。

返回值

此函式不返回任何值。

無比較器

示例

在下面的程式碼中,我們建立了兩個排序的列表,任務是合併這些列表,並且生成的輸出也應該是排序的。

 線上演示

#include <bits/stdc++.h>
using namespace std;
int main(){
   //creating the sorted list
   list<int> myList_1 = {2, 4, 6, 8 };
   list<int> myList_2 = {1, 3, 5, 7 };
   //using merge() function to merge the lists
   myList_2.merge(myList_1);
   cout <<"Lists after merging : ";
   for(auto i = myList_2.begin(); i != myList_2.end(); ++i)
      cout << *i << " ";
   return 0;
}

示例

如果我們執行上面的程式碼,它將生成以下輸出

Lists after merging : 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(){
   //create a list
   list<int> myList_1 = {2, 4, 1 };
   list<int> myList_2 = {7, 6, 5 };
   myList_1.sort();
   myList_2.sort();
   //using merge() function to merge the lists
   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

更新於:2020年3月2日

3K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告