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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP