C++ STL มีฟังก์ชันทั่วไปที่เป็นประโยชน์ เช่น std::for_each น่าเสียดายที่พวกเขาสามารถใช้งานได้ค่อนข้างยุ่งยาก โดยเฉพาะอย่างยิ่งหาก functor ที่คุณต้องการใช้นั้นไม่ซ้ำกับฟังก์ชันเฉพาะ ดังนั้นฟังก์ชันที่คุณจะสร้างนี้จะอยู่ในเนมสเปซนั้นเพียงแค่ถูกใช้ในที่เดียว วิธีแก้ไขคือใช้ฟังก์ชันที่ไม่ระบุตัวตน
C++ ได้แนะนำนิพจน์แลมบ์ดาใน C++11 เพื่อให้สามารถสร้างฟังก์ชันที่ไม่ระบุตัวตนได้
ตัวอย่าง
#include<iostream> #include<vector> #include <algorithm> // for_each using namespace std; int main() { vector<int> myvector; myvector.push_back(1); myvector.push_back(2); myvector.push_back(3); for_each(myvector.begin(), myvector.end(), [](int x) { cout << x*x << endl; }); }
ผลลัพธ์
สิ่งนี้จะให้ผลลัพธ์ -
1 4 9
(int x) ใช้เพื่อกำหนดอาร์กิวเมนต์ที่นิพจน์แลมบ์ดาจะถูกเรียกด้วย [] ใช้เพื่อส่งผ่านตัวแปรจากขอบเขตโลคัลไปยังขอบเขตภายในของแลมบ์ดา ซึ่งเรียกว่าการจับตัวแปร นิพจน์เหล่านี้ถ้าง่าย สามารถอนุมานประเภทได้โดยอัตโนมัติ คุณยังสามารถระบุข้อมูลประเภทได้อย่างชัดเจนโดยใช้ไวยากรณ์ต่อไปนี้ -
ไวยากรณ์
[](int x) -> double { return x/2.0; }
หากต้องการสำรวจ C++ lambdas โดยละเอียด ให้ไปที่เธรด StackOverflow - https://stackoverflow.com/questions/7627098/what-is-a-lambda-expression-in-c11