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 forward_list::merge() trong C++.
Forward_list trong STL là gì?
forward_list là các container trình tự cho phép chèn và xóa trong thời gian không đổi ở bất kỳ vị trí nào trong chuỗi. forward_list được triển khai dưới dạng danh sách liên kết đơn. Thứ tự được duy trì bằng cách liên kết mỗi phần tử với phần tử tiếp theo trong chuỗi.
forward_list::merge() là gì?
forward_list::merge() là hàm built-in trong C++ STL được khai báo trong header <forward_list>. Hàm merge() được dùng để hợp nhất hai forward_list đã sắp xếp thành một. Trước khi hợp nhất, hai danh sách phải được sắp xếp. Nếu không truyền comparator, nó sẽ hợp nhất thành một danh sách sắp xếp tăng dần. Khi cần so sánh tùy chỉnh, ta truyền thêm comparator.
Cú pháp
flist_container1.merge(flist_container2); // hợp nhất hai list flist_container1.merge(flist_container2, comparator); // với comparator
Hàm này chấp nhận một hoặc hai tham số:
Tham số
list_container2– Đối tượng list thứ hai cần hợp nhất.comparator– Hàm so sánh nhị phân nhận hai giá trị cùng kiểu với list, trả vềtruenếu phần tử của list_container1 nên đứng trước list_container2, ngược lại trả vềfalse.
Giá trị trả về
Hàm này không trả về giá trị nào.
Ví dụ: Hợp nhất hai list đã sắp xếp
#include <bits/stdc++.h>
using namespace std;
int main() {
// tạo forward list với giá trị đã sắp xếp
forward_list<int> myForwardList1 = {1, 3, 5, 7};
forward_list<int> myForwardList2 = {2, 4, 6};
// hợp nhất hai forward list đã sắp xếp
myForwardList1.merge(myForwardList2);
cout << "Các phần tử sau khi hợp nhất" << endl;
for (auto i = myForwardList1.begin(); i != myForwardList1.end(); ++i)
cout << *i << " ";
return 0;
}
Kết quả
Chạy mã trên sẽ cho kết quả sau:
Các phần tử sau khi hợp nhất 1 2 3 4 5 6 7
Ví dụ: Sử dụng comparator
#include <bits/stdc++.h>
using namespace std;
int main() {
// tạo forward list chưa sắp xếp
forward_list<int> myForwardList1 = {3, 2, 9};
forward_list<int> myForwardList2 = {8, 1, 2};
// sắp xếp trước khi hợp nhất
myForwardList1.sort();
myForwardList2.sort();
myForwardList1.merge(myForwardList2);
cout << "Các phần tử sau khi hợp nhất" << endl;
for (auto i = myForwardList1.begin(); i != myForwardList1.end(); ++i)
cout << *i << " ";
return 0;
}
Kết quả
Chạy mã trên sẽ cho kết quả sau:
Các phần tử sau khi hợp nhất 1 2 2 3 8 9