Cách sử dụng thao tác merge của std::list trong C++
List là một trong những thư viện của C++ hỗ trợ việc khai báo và sử dụng danh sách liên kết đôi.
List hỗ trợ phương thức merge với 2 cách dùng:
merge (list& L): Ghép list L vào sau vị trí cuối cùng list hiện hành. Sau khi ghép nối, list L không còn phần tử nào.
merge (list& L, Compare comp): Ghép các phần tử của list L vào list hiện hành với vị trí dựa theo biểu thức comp. Biểu thức comp là một hàm trả về giá trị bool.
Tham khảo thêm tại trang http://www.cplusplus.com/reference/list/list/merge/.
Xét chương trình sau : (thử online tại cpp.sh/2jct), nhờ anh em giải thích tí về cách thức hoạt động của nó làm sao mà ra được kết quả như bên dưới. Cảm ơn nhiều
// list::merge
#include <iostream>
#include <list>
// compare only integral part:
bool mycomparison (double first, double second)
{ return ( (first)>(second) ); }
int main ()
{
std::list<double> first, second;
first.push_back (3.1);
first.push_back (2.2);
first.push_back (2.9); // 3.1 2.2 2.9
second.push_back (3.7);
second.push_back (7.1);
second.push_back (1.4);
second.push_back (2.1); // 3.7 7.1 1.4 2.1
first.merge(second,mycomparison);
std::cout << "first contains:";
for (std::list<double>::iterator it=first.begin(); it!=first.end(); ++it)
std::cout << ' ' << *it;
std::cout << '
';
return 0;
}
Kết quả:
first contains: 3.7 7.1 3.1 2.2 2.9 1.4 2.1
hàm merge dùng để trộn 2 list đã sắp xếp để được 1 list xấp xếp theo biểu thức comp.
chương trình trên sắp xếp theo biểu thức > .
3.1 > 3.7 -> false -> push_back 3.7
3.1 > 7.1 -> false -> 7.1
3.1 > 1.4 -> true - > 3.1
2.2 > 1.4 -> true -> 2.2
2.9 > 1.4 ->true -> 2.9
first hết -> đưa các phần từ của second còn lại vào.
1.4
2.1
Cảm ơn bạn, cho mình hỏi thêm: tại sao so sánh 2.2 với 7.1, chứ không phải so sánh 3.1 với 7.1?
mình gõ nhầm :v đã sửa lại rồi nha