sách gpt4 ăn đã đi

Giải thích chi tiết về hàm liên kết thư viện chuẩn c/C++

In lại Tác giả: qq735679552 Thời gian cập nhật: 28-09-2022 22:32:09 28 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài blog CFSDN này có giải thích chi tiết về hàm bind của thư viện chuẩn c/c++ được tác giả sưu tầm và biên soạn. Nếu các bạn quan tâm đến bài viết này thì nhớ like nhé.

Hàm liên kết được xác định trong tệp tiêu đề function. Hàm liên kết có thể được coi như một bộ chuyển đổi chức năng chung chấp nhận một đối tượng có thể gọi được và tạo ra một đối tượng có thể gọi được mới để "điều chỉnh" danh sách tham số của đối tượng ban đầu.

hàm liên kết: nhận tên hàm làm tham số và tạo hàm mới.

?
1
tự động newCallable = bind(callbale, arg_list);

Các tham số trong arg_list có thể bao gồm _1, _2, v.v., là các tham số của hàm mới newCallable.

Trong blog giới thiệu về biểu thức lambda này, vấn đề về tham số thứ ba của find_if đã được thảo luận. Vào thời điểm đó, vấn đề này đã được giải quyết bằng biểu thức lambda.

Giải pháp: liên kết(check_size, _1, sz).

?
1
auto idx = find_if(svec.begin(),svec.end(),bind(check_size, _1, 6));

Trên thực tế, newCall= bind(check_size, _1, sz) trả về một hàm mới newCall. newCall này chỉ chấp nhận một tham số, đáp ứng chính xác các yêu cầu của find_if.

•Từ quan điểm của find_if, à, newCall là một hàm có một tham số, OK, không vấn đề gì. •Theo quan điểm của người lập trình, check_size là một hàm có hai tham số, nhưng sz(6) bị ràng buộc trước với newCall •Khi newCall(s) được gọi, check_size(s, 6) thực sự được gọi. cũng có 2 tham số, ngoại trừ tham số thứ hai có giá trị mặc định là 6. newCall(const string &s, size_t sz = 6); nên khi gọi newCall, chỉ cần truyền một tham số là đủ.

Lưu ý: _1, _2, v.v. được đặt trong phần giữ chỗ của vùng tên, vì vậy hãy sử dụng:

?
1
2
//_1,_n được đặt trong std::placeholders
sử dụng không gian tên std::chỗ giữ chỗ;

sử dụng tham số liên kết:

?
1
2
//g là một đối tượng có thể gọi được với 2 tham số
tự động g = liên kết(func, a, b, _2, c, _1); //func là hàm có 5 tham số

Gọi g(X, Y) tương đương với func(a, b, Y, c, X).

ví dụ:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include
#include
#include
#include
#include
sử dụng không gian tên tiêu chuẩn;
//_1,_n được đặt trong std::placeholders                       
sử dụng không gian tên std::chỗ giữ chỗ;
bool kiểm tra kích thước( hằng số chuỗi &s, string::size_type sz){
  trở lại s. kích thước() >= sz;
}
bool ngắn hơn( hằng số chuỗi &a, hằng số chuỗi &b){
  trở lại a. kích thước() < b. kích thước();
}
ostream&in(ostream&os, hằng số chuỗi &s, hằng số char &c){
  //c = ',';                                 
  trở lại hệ điều hành << s << c;
}
số nguyên chủ yếu(){
  /*                                     
  //Sử dụng liên kết để đạt được chức năng tương tự như lambda                      
  vector svec{"aab","d","aa","bb","e","bbb"};             
  stable_sort(svec.begin(),svec.end(),[](const chuỗi &a, const chuỗi &b){  
    trả về a.size() < b.size();                       
   });                                    
  chuỗi::kích thước_kiểu sz = 3;                          
  auto idx = find_if(svec.begin(),svec.end(),bind(check_size, _1, sz));    
  cout << *idx << endl;                            
  idx = find_if(svec.begin(),svec.end(),[sz](const string &s){        
    trả về s.size() >= sz;                         
   });                                    
  cout << *idx << endl;                            
  */
  /*                                     
  //Dùng bind để thay đổi vị trí các tham số của hàm gốc                      
  // Thứ tự tăng dần                                   
  vector svec{"aab","d","aa","bb","e","bbb"};             
  sắp xếp(svec.begin(), svec.end(), ngắn hơn);                  
  for(auto const &s : svec){                         
   lệnh << s << " ";                             
  }                                      
  lệnh cout << kết thúc;                                
  // Do thay đổi vị trí của tham số short nên nó sẽ có thứ tự giảm dần.                
  sắp xếp(svec.begin(), svec.end(),bind(ngắn hơn, _2, _1));            
  for(auto const &s : svec){                         
   lệnh << s << " ";                             
  }                                      
  lệnh cout << kết thúc;                                
  */
  // liên kết tham chiếu, bạn phải sử dụng hàm ref hoặc cref để chuyển đổi đối tượng thành tham chiếu, bạn không thể sử dụng &        
  ostream &os = cout;
  hằng số char c = '' ;
  vector svec{ "aab" , "đ" , "à" , "bb" , "e" , "bbb" };
  for_each(svec.begin(),svec.end(),[&os, c]( hằng số chuỗi &s){
    hệ điều hành << s << c;
   });
  os << kết thúc;
  for_each(svec.begin(),svec.end(),bind(print, ref(os), _1, cref(c)));
  os << kết thúc;
  cout << c << endl;
}

Tóm tắt.

Trên đây là giải thích chi tiết về chức năng liên kết của thư viện chuẩn c/C++ được biên tập viên giới thiệu. Tôi hy vọng nó sẽ hữu ích cho bạn. Nếu có thắc mắc vui lòng để lại tin nhắn cho tôi và biên tập viên sẽ trả lời bạn. thời gian. Tôi cũng xin cảm ơn mọi người đã ủng hộ trang web của tôi! .

Liên kết gốc: https://www.cnblogs.com/xiaoshiwang/archive/2018/09/20/9678769.html.

Cuối cùng, bài viết này về giải thích chi tiết về hàm liên kết của thư viện chuẩn c/C++ kết thúc tại đây. Nếu bạn muốn biết thêm về giải thích chi tiết về hàm liên kết của thư viện chuẩn c/C++, vui lòng tìm kiếm các bài viết về CFSDN hoặc. tiếp tục duyệt các bài viết liên quan. Tôi hy vọng tất cả các bạn sẽ ủng hộ blog của tôi trong tương lai! .

28 4 0
qq735679552
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress