30/09/2018, 16:29

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

Nguyen Hai viết 18:33 ngày 30/09/2018

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

Ninh Lê viết 18:41 ngày 30/09/2018

2.2 > 7.1 -> false -> 7.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?

Nguyen Hai viết 18:36 ngày 30/09/2018

mình gõ nhầm :v đã sửa lại rồi nha

Bài liên quan
0