Lambdas mit Parametern
Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy — Lektion 43 von 56.
Nachdem Sie nun die grundlegende Lambda-Syntax verstehen, lassen Sie uns Lambdas nützlicher machen, indem wir Parameter hinzufügen. Genau wie reguläre Funktionen können Lambdas Eingabewerte akzeptieren, mit denen sie arbeiten.
Um Parameter zu einem Lambda hinzuzufügen, platzieren Sie diese in den Klammern nach der Capture-Klausel:
auto addNumbers = [](int a, int b) {
std::cout << "Sum: " << (a + b) << std::endl;
};
addNumbers(5, 3); // Gibt aus: Sum: 8Die Parametersyntax funktioniert genau wie bei regulären Funktionsparametern – Sie geben den Typ gefolgt vom Parameternamen an. Sie können mehrere Parameter durch Kommas getrennt angeben, genau wie oben gezeigt.
Sie können ein Lambda mit Parametern auch sofort aufrufen, ohne es zu speichern:
[](int x, int y) {
std::cout << "Product: " << (x * y) << std::endl;
}(4, 7); // Gibt aus: Product: 28Diese Fähigkeit, Parameter zu akzeptieren, macht Lambdas wesentlich flexibler und wiederverwendbarer, da sie es Ihnen ermöglicht, kleine Funktionen zu erstellen, die bei jedem Aufruf unterschiedliche Eingabewerte verarbeiten können.
Aufgabe
EinfachErstellen Sie ein Programm, das Lambda-Ausdrücke mit Parametern demonstriert, indem Sie einen einfachen Taschenrechner bauen, der verschiedene mathematische Operationen ausführt. Diese Herausforderung testet Ihr Verständnis dafür, wie man Lambda-Ausdrücke definiert, die Eingabewerte akzeptieren und mit ihnen arbeiten.
Die folgenden Eingaben werden bereitgestellt:
- Zwei Ganzzahlen
num1undnum2, welche die Zahlen für die Berechnungen darstellen - Ein Zeichen
operation, das die auszuführende mathematische Operation darstellt
Ihr Programm sollte:
- Einen Lambda-Ausdruck namens
adderstellen, der zwei Ganzzahl-Parameter entgegennimmt und deren Summe im FormatSum: [result]ausgibt - Einen Lambda-Ausdruck namens
subtracterstellen, der zwei Ganzzahl-Parameter entgegennimmt und deren Differenz im FormatDifference: [result]ausgibt - Einen Lambda-Ausdruck namens
multiplyerstellen, der zwei Ganzzahl-Parameter entgegennimmt und deren Produkt im FormatProduct: [result]ausgibt - Die zwei Zahlen und das Operationszeichen aus der Eingabe lesen
- Basierend auf dem Operationszeichen den entsprechenden Lambda-Ausdruck mit den beiden Zahlen aufrufen
Das Operationszeichen ist eines der folgenden:
+für Addition (rufen Sie denaddLambda-Ausdruck auf)-für Subtraktion (rufen Sie densubtractLambda-Ausdruck auf)*für Multiplikation (rufen Sie denmultiplyLambda-Ausdruck auf)
Verwenden Sie das folgende exakte Ausgabeformat basierend auf der Operation:
Für Addition:
Sum: [result]Für Subtraktion:
Difference: [result]Für Multiplikation:
Product: [result]Denken Sie daran, dass Lambda-Parameter in den Klammern nach der Capture-Klausel definiert werden, wobei dieselbe Syntax wie bei regulären Funktionsparametern verwendet wird. Speichern Sie jeden Lambda-Ausdruck in einer Variablen mit dem Schlüsselwort auto und rufen Sie dann den entsprechenden Lambda-Ausdruck basierend auf dem eingegebenen Operationszeichen mithilfe einer if-else-Anweisung oder einer switch-Anweisung auf.
Spickzettel
Lambda-Ausdrücke können Parameter akzeptieren, indem diese in Klammern nach der Capture-Klausel platziert werden:
auto addNumbers = [](int a, int b) {
std::cout << "Sum: " << (a + b) << std::endl;
};
addNumbers(5, 3); // Gibt aus: Sum: 8Die Parametersyntax funktioniert genau wie bei regulären Funktionsparametern – geben Sie den Typ gefolgt vom Parameternamen an. Mehrere Parameter werden durch Kommas getrennt.
Sie können ein Lambda mit Parametern auch sofort aufrufen, ohne es zu speichern:
[](int x, int y) {
std::cout << "Product: " << (x * y) << std::endl;
}(4, 7); // Gibt aus: Product: 28Probier es selbst
#include <iostream>
using namespace std;
int main() {
// Eingabe lesen
int num1, num2;
char operation;
cin >> num1 >> num2 >> operation;
// TODO: Lambda-Ausdrücke für Additions-, Subtraktions- und Multiplikationsoperationen erstellen
// TODO: if-else- oder switch-Anweisung verwenden, um das entsprechende Lambda basierend auf der Operation aufzurufen
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