Hợp và trộn¶
Trong quá trình luyện công, người học phải tự mình viết những hàm hợp và trộn nhằm rèn luyện tư duy và kỹ thuật lập trình. Tuy nhiên, khi làm bài thi, thời gian là yếu tố quan trọng, thí sinh nên sử dụng những công cụ có sẵn của ngôn ngữ, hạn chế viết lại hoặc tạo lại nhằm dành thời giờ và công sức cho ý tưởng.
Bài viết này hướng dẫn cách sử dụng một số hàm có sẵn để hợp, trộn và kiểm tra hai vector chứa nhau.
Hợp nhất hai vector¶
Khởi tạo v1
, v2
và v3
là các vector gồm số nguyên.
Lưu ý
Cả ba vector đều có thứ tự tăng dần.
Các hàm liên quan trong bài này chỉ áp dụng cho vector đã sắp xếp tăng dần.
Trong C++, để hợp nhất hai vector v1
và v2
, ta dùng hàm set_union()
.
Đoạn mã sau hợp nhất vector v1
và v2
thành vector u
. Trong đó, ta đính kèm thêm hàm back_inserter()
để gắn vào vector kết quả.
Output:
Vector 1: 0 1 2 2 4 4 5 7 7 7
Vector 2: 1 1 1 4 5 5 6 8 8 9
Sau khi hợp nhất: 0 1 1 1 2 2 4 4 5 5 6 7 7 7 8 8 9
Đối với phần tử mà cả hai vector v1
và v2
đều có, vector hợp u
chỉ lấy một lần phần tử này.
Trong trường hợp v1
chứa một phần tử 1
, v2 chứa ba phần tử 1
, vector u
sẽ lấy ba phần tử 1
của v2
.
Trộn hai vector¶
Trong C++, để trộn hai vector, ta dùng hàm merge()
.
Trước khi trộn, ta phải chỉ định kích thước cho vector kết quả, là bằng kích thước của hai vector con cộng lại. Kết đến mới gọi hàm trộn.
Đoạn mã sau trộn hai vector v1
và v2
thành vector merged
.
Output:
Kiểm tra hai vector chứa nhau¶
Để kiểm tra vector này có chứa vector kia hay không, ta dùng hàm includes()
.
boolalpha
giúp in ra biến kiểubool
ở dạngtrue
vàfalse
, thay vì1
và0
.
Nội dung này sẽ cập nhật sau khi chủ thớt được đồ-nét :)
Output:
Vector 1: 0 1 2 2 4 4 5 7 7 7
Vector 2: 1 1 1 4 5 5 6 8 8 9
Vector 3: 1 4 4
Vector 1 chứa vector 3: true
Vector 2 chứa vector 3: false
Quan sát output, vector v1
chứa vector v3
, mặc dù các phần tử 1
và 4
của v1
không nằm liền kề nhau. Ngược lại, v2
không chứa v3
, vì v2
chỉ có một phần tử 4
, trong khi v3
có đến hai phần tử 4
.
Toàn bộ chương trình¶
Chương trình C++ hoàn chỉnh đặt tại Gist của GitHub.
Nội dung này sẽ cập nhật sau khi chủ thớt được đồ-nét :)