C++ Lambda Functions

🔹 تعریف

  • Lambda Function یک تابع بی‌نام (anonymous) است که می‌توان مستقیماً در محل تعریف استفاده کرد.

  • معرفی شده در C++11.

  • کاربرد: کد کوتاه، استفاده در الگوریتم‌ها، و callbackها.

🔹 ساختار کلی

[ capture_list ] ( parameters ) -> return_type { // بدنه تابع }
  • capture_list → متغیرهای بیرونی که در lambda استفاده می‌شوند ([])

  • parameters → ورودی تابع

  • return_type → نوع بازگشتی (معمولاً قابل حدس است و می‌توان حذف کرد)

1️⃣ مثال ساده: بدون پارامتر

#include <iostream> using namespace std; int main() { auto greet = []() { cout << "Hello, World!" << endl; }; greet(); // خروجی: Hello, World! }

2️⃣ مثال: با پارامتر

#include <iostream> using namespace std; int main() { auto add = [](int a, int b) { return a + b; }; cout << add(5, 10) << endl; // خروجی: 15 }

3️⃣ مثال: با capture list

#include <iostream> using namespace std; int main() { int x = 10; auto printX = [x]() { // capture by value cout << x << endl; }; printX(); // خروجی: 10 auto modifyX = [&x]() { // capture by reference x += 5; }; modifyX(); cout << x << endl; // خروجی: 15 }

4️⃣ مثال: استفاده با الگوریتم‌ها

#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> numbers = {1, 2, 3, 4, 5}; for_each(numbers.begin(), numbers.end(), [](int n){ cout << n*2 << " "; }); } // خروجی: 2 4 6 8 10

🔹 نکات مهم

  1. Lambda بی‌نام است و می‌توان آن را به متغیر auto نسبت داد یا مستقیم استفاده کرد.

  2. capture list برای دسترسی به متغیرهای بیرونی است:

    • [x] → capture by value

    • [&x] → capture by reference

  3. Lambda می‌تواند ورودی و خروجی داشته باشد و حتی Void باشد.

  4. Lambda به خصوص در STL و callbackها کاربرد زیادی دارد.