Trong bài viết này, chúng ta sẽ thảo luận về cách hoạt động, cú pháp và ví dụ của hàm list::splice() trong C++ STL.
List trong STL là gì?
List là một cấu trúc dữ liệu cho phép chèn và xóa ở bất kỳ vị trí nào trong chuỗi với thời gian không đổi. List được triển khai dưới dạng danh sách liên kết đôi. List cho phép cấp phát bộ nhớ không liên tục. List hoạt động tốt hơn array, vector và deque khi chèn, trích xuất và di chuyển phần tử ở bất kỳ vị trí nào trong container. Trong List, truy cập trực tiếp vào phần tử chậm hơn và list tương tự như forward_list, nhưng forward_list là danh sách liên kết đơn và chỉ có thể lặp tiến.
list::splice() là gì?
list::splice() là hàm built-in trong C++ STL được khai báo trong header <list>. Hàm này dùng để chuyển phần tử từ một list container sang list container khác tại vị trí xác định. Hàm chèn nội dung vào list đích và xóa nội dung đó khỏi list nguồn, thay đổi kích thước của cả hai list.
Cú pháp
// 3 dạng cú pháp: list1.splice(position, list2); list1.splice(position, list2, i); list1.splice(position, list2, first, last);
Tham số
position – Vị trí trong list đích nơi các phần tử được chuyển vào.
list2 – List nguồn chứa các phần tử cần chuyển.
i – Iterator chỉ định vị trí trong list2 từ đó chuyển phần tử đến cuối list2.
first, last – Hai iterator xác định phạm vi [first, last) trong list2 cần chuyển.
Ví dụ
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
Giá trị trả về
Hàm này trả về reverse iterator trỏ đến phần tử cuối cùng của list. Reverse iterator là iterator di chuyển ngược.
Ví dụ hoàn chỉnh 1
#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;
}
Kết quả
list after splice operation 10 20 30 40 50
Ví dụ hoàn chỉnh 2
#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;
}
Kết quả
list 1 after splice operation 30 40 50 10 20 list 3 after splice operation 60 30 40 50 10 20