Lambda với tham số
Thuộc phần Logic và luồng chương trình trong hành trình C++ của Coddy. Bài học 43 trên 56.
Giờ bạn đã hiểu cú pháp lambda cơ bản, hãy làm cho lambda hữu ích hơn bằng cách thêm tham số. Giống như hàm thông thường, lambda có thể nhận giá trị đầu vào để xử lý.
Để thêm tham số vào lambda, hãy đặt chúng trong dấu ngoặc đơn sau mệnh đề capture:
auto addNumbers = [](int a, int b) {
std::cout << "Sum: " << (a + b) << std::endl;
};
addNumbers(5, 3); // In ra: Sum: 8Cú pháp tham số hoạt động giống hệt cú pháp tham số thông thường của hàm (function): bạn ghi kiểu dữ liệu trước, sau đó là tên tham số. Bạn có thể dùng nhiều tham số, ngăn cách nhau bằng dấu phẩy, như minh họa ở trên.
Bạn cũng có thể gọi ngay một lambda có tham số mà không cần lưu lại:
[](int x, int y) {
std::cout << "Product: " << (x * y) << std::endl;
}(4, 7); // In ra: Product: 28Khả năng nhận tham số này giúp hàm lambda linh hoạt và có thể tái sử dụng hơn, cho phép bạn tạo các hàm nhỏ có thể xử lý những giá trị đầu vào khác nhau mỗi lần được gọi.
Thử thách
DễTạo một chương trình minh họa biểu thức lambda có tham số bằng cách xây dựng một máy tính đơn giản thực hiện các phép toán khác nhau. Thử thách này sẽ kiểm tra mức độ hiểu biết của bạn về cách định nghĩa biểu thức lambda nhận giá trị đầu vào và xử lý chúng.
Chương trình sẽ nhận các giá trị đầu vào sau:
- Hai số nguyên
num1vànum2đại diện cho các số dùng để tính toán - Một ký tự
operationđại diện cho phép toán cần thực hiện
Chương trình của bạn cần:
- Tạo một biểu thức lambda có tên
add, nhận hai tham số số nguyên và in ra tổng của chúng theo định dạngSum: [result] - Tạo một biểu thức lambda có tên
subtract, nhận hai tham số số nguyên và in ra hiệu của chúng theo định dạngDifference: [result] - Tạo một biểu thức lambda có tên
multiply, nhận hai tham số số nguyên và in ra tích của chúng theo định dạngProduct: [result] - Đọc hai số và ký tự phép toán từ đầu vào
- Dựa vào ký tự phép toán, gọi biểu thức lambda thích hợp với hai số đó
Ký tự phép toán sẽ là một trong các ký tự sau:
+để cộng, gọi biểu thức lambdaadd-để trừ, gọi biểu thức lambdasubtract*để nhân, gọi biểu thức lambdamultiply
Dùng chính xác định dạng đầu ra sau tùy theo phép toán:
Phép cộng:
Sum: [result]Phép trừ:
Difference: [result]Phép nhân:
Product: [result]Lưu ý rằng bạn định nghĩa tham số lambda bên trong dấu ngoặc đơn, sau mệnh đề capture, bằng cùng cú pháp như tham số của hàm thông thường. Lưu mỗi biểu thức lambda vào một biến bằng từ khóa auto, sau đó gọi biểu thức lambda thích hợp dựa trên ký tự phép toán đầu vào bằng câu lệnh if-else hoặc câu lệnh switch.
Tự làm thử
#include <iostream>
using namespace std;
int main() {
// Đọc đầu vào
int num1, num2;
char operation;
cin >> num1 >> num2 >> operation;
// TODO: Tạo các biểu thức lambda để cộng, trừ và nhân
// TODO: Dùng câu lệnh if-else hoặc switch để gọi lambda phù hợp với phép toán
return 0;
}Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng chương trình
1Con trỏ và bộ nhớ
Con trỏ là gì?Toán tử lấy địa chỉToán tử giải tham chiếuCon trỏ nullCon trỏ và mảngBộ nhớ động với newGiải phóng bộ nhớ với deleteÔn tập: luyện tập về con trỏ2Vector (mảng động)
Giới thiệu std::vectorTạo vectorThêm phần tửTruy cập phần tửKích thước vectorDuyệt bằng vòng lặp forVòng lặp for dựa trên phạm viXóa phần tửÔn tập: các thao tác với vector5Dự án: Công cụ quản lý hàng tồn kho
Thiết lập dự ánThêm và cập nhật mặt hàng3Dự án: Công cụ danh sách công việc
Tổng quan dự ánThêm công việc6Tập hợp (các phần tử duy nhất)
Giới thiệu std::setTạo tập hợp và thêm phần tửKiểm tra phần tửXóa phần tửDuyệt qua tập hợpÔn tập: các số duy nhấtTự luyện tập: Trình biên dịch C++ online