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, mit dem du kleine, anonyme Funktionen direkt dort erstellen kannst, wo du sie brauchst. Stell sie dir als Mini-Funktionen vor, die du definieren und verwenden kannst, without eine separate function-Deklaration 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 reguläre function), und die geschweiften Klammern {} enthalten den function body.
Die capture clause steuert, welche variable aus dem umgebenden Gültigkeitsbereich die Lambda verwenden kann. Die häufigsten Formen sind:
[=] — alle lokalen variable by value erfassen (die Lambda erhält eine eigene copy)[&] — alle lokalen variable by reference erfassen (die Lambda greift auf die ursprünglichen zu)[] — nichts erfassen (die Lambda kann keine Variablen außerhalb verwenden)So erstellst und rufst du eine einfache lambda auf:
auto myLambda = []() {
std::cout << "Hello from Lambda!" << std::endl;
};
myLambda(); // Rufe die Lambda-Funktion aufDu kannst auch eine lambda immediately definieren und ausführen, without sie in einer variable zu speichern:
[]() {
std::cout << "Immediate execution!" << std::endl;
}();Lambda-Ausdrücke sind besonders nützlich für kurze, einmalige functions, die du nicht separat definieren möchtest. Sie machen deinen Code prägnanter und halten zusammengehörige Logik eng beieinander.
Aufgabe
EinfachErstelle ein Programm, das die grundlegende Syntax und execution von lambda-expressions demonstriert. Diese Herausforderung testet dein Verständnis dafür, wie einfache lambda-functions without Parameter definiert und aufgerufen werden.
Dein Programm sollte:
- Eine
lambda-expressionerstellen, dieHello from Lambda!prints - Diese
lambdain einervariableusingdasauto-keywordStore - Die
lambda-functionaufrufen, um sie auszuführen - Eine
secondlambda-expressionerstellen, dieLambda executed successfully!prints - Diese
secondlambdaimmediatelyExecute,withoutsie in einervariablezu speichern
Verwende das folgende exakte Ausgabeformat:
Hello from Lambda!
Lambda executed successfully!Denke daran, dass lambda-expressions die Syntax [](){} verwenden, wobei die eckigen Klammern [] die Erfassungsklausel sind, die Klammern () Parameter enthalten (für diese Herausforderung leer) und die geschweiften Klammern {} den Funktionskörper enthalten. Du kannst eine lambda in einer variable using auto variableName = [](){...}; speichern und sie anschließend mit variableName(); aufrufen. Für die sofortige Ausführung kannst du die Syntax [](){...}(); verwenden, die die lambda in einer Anweisung definiert und aufruft.
Probier es selbst
#include <iostream>
using namespace std;
int main() {
// TODO: Schreibe deinen Code darunter
// Create a lambda expression that prints "Hello from Lambda!"
// Speichere es in einer Variable mit dem auto-Schlüsselwort
// Rufe die Lambda-Funktion auf
// Create a second lambda that prints "Lambda executed successfully!"
// Führe es sofort aus, ohne es in einer Variable 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Übe selbstständig: Online-C++-Compiler