ในบทความนี้เราจะพูดถึงการทำงาน ไวยากรณ์และตัวอย่างของฟังก์ชัน list::splice() ใน C++ STL
รายการใน STL คืออะไร
รายการเป็นโครงสร้างข้อมูลที่อนุญาตให้แทรกและลบเวลาคงที่ได้ทุกที่ตามลำดับ รายการถูกนำไปใช้เป็นรายการที่เชื่อมโยงเป็นสองเท่า รายการอนุญาตการจัดสรรหน่วยความจำที่ไม่ต่อเนื่องกัน List ทำการดึงการแทรกและการย้ายองค์ประกอบได้ดีกว่าในตำแหน่งใดๆ ในคอนเทนเนอร์มากกว่าอาร์เรย์ เวกเตอร์ และ deque ใน List การเข้าถึงองค์ประกอบโดยตรงนั้นช้าและ list นั้นคล้ายกับ forward_list แต่ออบเจกต์ของรายการส่งต่อเป็นรายการที่เชื่อมโยงเพียงรายการเดียว และสามารถทำซ้ำได้เพียงส่งต่อเท่านั้น
รายการ::splice() คืออะไร
list::splice() เป็นฟังก์ชัน inbuilt ใน C++ STL ซึ่งประกาศไว้ในไฟล์ส่วนหัว splice() ใช้เพื่อถ่ายโอนองค์ประกอบจากคอนเทนเนอร์รายการหนึ่งไปยังคอนเทนเนอร์รายการอื่นในตำแหน่งที่แน่นอน ฟังก์ชันนี้จะแทรกเนื้อหาลงในรายการและลบเนื้อหาเหล่านั้นออกจากรายการอื่นโดยปรับเปลี่ยนขนาดของรายการทั้งสอง
ไวยากรณ์
This function’s syntax can be defined as 3 ways: list1.splice(position, list2); list1.splice(position, list2, i); list1.splice(position, list2, first, last);
พารามิเตอร์
-
ตำแหน่ง − ตำแหน่งของรายการที่เราต้องการให้โอนย้ายองค์ประกอบ
-
รายการ2 − รายการจากที่เราต้องการโอนองค์ประกอบ
-
i:เป็นตัววนซ้ำซึ่งระบุตำแหน่งของ list2 จากตำแหน่งที่องค์ประกอบที่เราต้องการโอนไปจนสิ้นสุด list2
-
ครั้งแรก สุดท้าย − ทั้งสองสิ่งนี้เป็นตัววนซ้ำที่กำหนดตำแหน่งเริ่มต้นและสิ้นสุดของ list2 ที่เราต้องการโอนองค์ประกอบ
ตัวอย่าง
Input: list<int> List_container= { 10, 11, 13, 15}; list<int> List2 = {1, 2, 3, 4}; List_container.splice(2, List2); Output: List_container= 10 11 13 15 3 4 List2 = 1 2
ผลตอบแทนที่ได้รับ
ฟังก์ชันนี้จะคืนค่าตัววนซ้ำย้อนกลับที่ชี้ไปยังองค์ประกอบสุดท้ายของรายการ Reverse iterator คือตัววนซ้ำที่เคลื่อนที่ในทิศทางย้อนกลับ
#include <bits/stdc++.h> using namespace std; int main(){ list<int> myList_1 = { 10, 20, 30, 40 }; list<int> myList_2 = { 50, 60 }; list<int>::iterator i; i = myList_2.begin(); myList_1.splice(myList_1.end(), myList_2, i); cout<<"list after splice operation" << endl; for (auto temp : myList_1) cout << temp << " "; return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
list after splice operation 10 20 30 40 50
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int main(){ list<int> myList_1 = { 10, 20}; list<int> myList_2 = { 30, 40, 50}; list<int> myList_3 = {60}; myList_1.splice(myList_1.begin(), myList_2); cout << "list 1 after splice operation" << endl; for (auto x : myList_1) cout << x << " "; myList_3.splice(myList_3.end(), myList_1); cout << "\nlist 3 after splice operation" << endl; for (auto x : myList_3) cout << x << " "; return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
list 1 after splice operation 30 40 50 10 20 list 1 after splice operation 60 30 40 50 10 20