Einführung in Lambda-Ausdrücke
Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy — Lektion 42 von 56.
Lambda-Ausdrücke sind ein leistungsstarkes C++-Feature, das es Ihnen ermöglicht, kleine, anonyme Funktionen genau dort zu erstellen, wo Sie sie benötigen. Betrachten Sie sie als Mini-Funktionen, die Sie definieren und verwenden können, ohne eine separate Funktionsdeklaration schreiben zu müssen.
Die grundlegende Syntax für einen Lambda-Ausdruck folgt diesem Muster: [](){}. Die eckigen Klammern [] werden als Capture-Clause bezeichnet, die runden Klammern () enthalten Parameter (genau wie bei regulären Funktionen), und die geschweiften Klammern {} enthalten den Funktionsrumpf.
Die Capture-Clause steuert, welche Variablen aus dem umgebenden Gültigkeitsbereich das Lambda verwenden kann. Die gebräuchlichsten Formen sind:
[=] — erfasst alle lokalen Variablen als Wert (das Lambda erhält eine eigene Kopie)[&] — erfasst alle lokalen Variablen als Referenz (das Lambda greift auf die Originale zu)[] — erfasst nichts (das Lambda kann keine externen Variablen verwenden)So erstellen und rufen Sie ein einfaches Lambda auf:
auto myLambda = []() {
std::cout << "Hello from Lambda!" << std::endl;
};
myLambda(); // Die Lambda-Funktion aufrufenSie können ein Lambda auch sofort definieren und ausführen, ohne es in einer Variablen zu speichern:
[]() {
std::cout << "Immediate execution!" << std::endl;
}();Lambda-Ausdrücke sind besonders nützlich für kurze, einmalige Funktionen, die Sie nicht separat definieren möchten. Sie machen Ihren Code prägnanter und halten zusammengehörige Logik nah beieinander.
Aufgabe
EinfachErstellen Sie ein Programm, das die grundlegende Syntax und Ausführung von Lambda-Ausdrücken demonstriert. Diese Herausforderung testet Ihr Verständnis dafür, wie man einfache Lambda-Funktionen ohne Parameter definiert und aufruft.
Ihr Programm sollte:
- Einen Lambda-Ausdruck erstellen, der
Hello from Lambda!ausgibt - Dieses Lambda unter Verwendung des Schlüsselworts
autoin einer Variablen speichern - Die Lambda-Funktion aufrufen, um sie auszuführen
- Einen zweiten Lambda-Ausdruck erstellen, der
Lambda executed successfully!ausgibt - Dieses zweite Lambda sofort ausführen, ohne es in einer Variablen zu speichern
Verwenden Sie das folgende exakte Ausgabeformat:
Hello from Lambda!
Lambda executed successfully!Denken Sie daran, dass Lambda-Ausdrücke die Syntax [](){} verwenden, wobei die eckigen Klammern [] die Capture-Klausel sind, die runden Klammern () Parameter enthalten (leer für diese Herausforderung) und die geschweiften Klammern {} den Funktionskörper enthalten. Sie können ein Lambda in einer Variablen speichern, indem Sie auto variableName = [](){...}; verwenden, und es dann mit variableName(); aufrufen. Für die sofortige Ausführung können Sie die Syntax [](){...}(); verwenden, die das Lambda in einer Anweisung definiert und aufruft.
Spickzettel
Lambda-Ausdrücke sind anonyme Funktionen, die inline definiert werden können. Sie verwenden die Syntax [](){}, wobei:
[]- Capture-Klausel (steuert den Zugriff auf äußere Variablen)()- Parameter{}- Funktionsrumpf
Gängige Formen der Capture-Klausel:
[]- nichts erfassen[=]- alle äußeren Variablen per Wert erfassen[&]- alle äußeren Variablen per Referenz erfassen
Einen Lambda-Ausdruck speichern und aufrufen:
auto myLambda = []() {
std::cout << "Hello from Lambda!" << std::endl;
};
myLambda(); // Die Lambda-Funktion aufrufenEinen Lambda-Ausdruck sofort ausführen:
[]() {
std::cout << "Immediate execution!" << std::endl;
}();Probier es selbst
#include <iostream>
using namespace std;
int main() {
// TODO: Schreiben Sie Ihren Code unten
// Erstellen Sie einen Lambda-Ausdruck, der "Hello from Lambda!" ausgibt
// Speichern Sie ihn in einer Variablen mit dem Schlüsselwort auto
// Rufen Sie die Lambda-Funktion auf
// Erstellen Sie ein zweites Lambda, das "Lambda executed successfully!" ausgibt
// Führen Sie es sofort aus, ohne es in einer Variablen zu speichern
return 0;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Pointer und Speicher
Was ist ein Pointer?AdressoperatorDereferenzierungsoperatorNull-PointerPointer und ArraysDynamischer Speicher mit 'new'Speicher freigeben mit 'delete'Zusammenfassung – Pointer-Übung4Maps (Schlüssel-Wert-Paare)
Einführung in std::mapErstellen einer MapWerte abrufen und ändernAuf Schlüssel prüfenPaare entfernenÜber eine Map iterierenZusammenfassung – Wortfrequenz7Fortgeschrittene Funktionen
ReferenzübergabeEinführung in Lambda-AusdrückeLambdas mit ParameternLambdas mit RückgabewertenEinführung in die RekursionRekursive FakultätLambda Sort2Vektoren (Dynamische Arrays)
Einführung in std::vectorEinen Vector erstellenElemente hinzufügenAuf Elemente zugreifenVector-GrößeIterieren mit einer For-SchleifeRange-based For-SchleifeElemente entfernenZusammenfassung – Vector-Operationen3Projekt: Aufgabenlisten-Tool
ProjektübersichtEine Aufgabe hinzufügen