Heim > Backend-Entwicklung > C++ > Wie übergebe ich Parameter im C++-Lambda-Ausdruck?

Wie übergebe ich Parameter im C++-Lambda-Ausdruck?

WBOY
Freigeben: 2024-06-02 10:53:57
Original
757 Leute haben es durchsucht

Durch die Übergabe von Parametern über die Erfassungsliste können Lambda-Ausdrücke auf externe Variablen zugreifen. Am Beispiel von Parametern vom Typ int lautet die Erfassungsliste [x](int y), wobei x eine externe Variable und y ein Lambda-Ausdrucksparameter ist. Mithilfe dieser Technik können Lambda-Ausdrücke in verschiedenen Szenarien verwendet werden, beispielsweise bei der Array-Summierung, bei der die Funktion std::accumulate Array-Elemente in einer Variablen mit einem Anfangswert von 0 akkumuliert, die einzeln durch den Lambda-Ausdruck akkumuliert wird.

C++ Lambda 表达式如何传递参数?

C++-Lambda-Ausdruck: Eine detaillierte Erklärung der Übergabe von Parametern

Der Lambda-Ausdruck ist eine vereinfachte anonyme Funktion, die in C++ häufig verwendet wird, um Inline-Funktionen präzise und effizient zu definieren. Damit ein Lambda-Ausdruck auf externe Variablen zugreifen kann, wird eine Capture-Liste verwendet. Das Gleiche gilt für die Übergabe von Parametern.

Capture-Liste, die Parameter übergibt

Die Capture-Liste steht vor der Parameterliste des Lambda-Ausdrucks und wird von [ und ] eingeschlossen. Es kann lokale Variablen und externe Variablen erfassen. Um Parameter zu übergeben, müssen Sie den Parametertyp und -namen in der Erfassungsliste angeben. [] 括起来。它可以捕获局部变量和外部变量。要传递参数,需要在捕获列表中指定参数类型和名称。

// 捕获列表传递 int 参数
auto lambda = [x](int y) { return x + y; };
Nach dem Login kopieren

上面的示例定义了一个 lambda 表达式 lambda,它接收一个名为 yint 型参数,并且可以访问外部局部变量 x

实战案例:使用 lambda 表达式求和

考虑一个需要将数组中的所有元素求和的场景。可以使用带有捕获列表传递参数的 lambda 表达式来简化此操作:

#include <vector>
#include <algorithm>

int main() {
  std::vector<int> numbers = {1, 2, 3, 4, 5};

  int sum = std::accumulate(numbers.begin(), numbers.end(), 0,
                            [](int x, int y) { return x + y; });

  std::cout << "Sum: " << sum << std::endl;
  return 0;
}
Nach dem Login kopieren

在这个例子中,std::accumulate 函数使用提供的 lambda 表达式将数组 numbers 中的元素逐个累加到初始值为 0sum 中。lambda 表达式接收两个整数参数 xy,并返回它们的和。

注意事项

  • 捕获 by value 和 by reference: lambda 表达式可以捕获变量 by value 或 by reference。用 = 表示 by value,用 &rrreee
  • Das obige Beispiel definiert einen Lambda-Ausdruck lambda, der einen Parameter vom Typ int mit dem Namen y empfängt und auf die externe lokale Variable x zugreifen kann .
  • Praktischer Fall: Summieren mit Lambda-Ausdrücken
  • Stellen Sie sich ein Szenario vor, in dem alle Elemente in einem Array summiert werden müssen. Dies kann vereinfacht werden, indem ein Lambda-Ausdruck mit einer Erfassungsliste verwendet wird, die Argumente übergibt:
  • rrreee In diesem Beispiel verwendet die Funktion std::accumulate den bereitgestellten Lambda-Ausdruck, um das Array numbers werden einzeln zu <code>sum mit einem Anfangswert von 0 akkumuliert. Ein Lambda-Ausdruck akzeptiert zwei ganzzahlige Parameter x und y und gibt deren Summe zurück.
  • Hinweise
    🎜🎜Erfassung nach Wert und Referenz: 🎜 Ein Lambda-Ausdruck kann Variablen nach Wert oder Referenz erfassen. Verwenden Sie = zur Darstellung nach Wert und & zur Darstellung nach Referenz. 🎜🎜🎜Hinweis zur Variablenlebensdauer: 🎜 Ein Lambda-Ausdruck kann nur auf lokale Variablen zugreifen, die während seiner Lebensdauer vorhanden sind. 🎜🎜🎜Vermeiden Sie die Erfassung großer Objekte: 🎜Die Erfassung großer Objekte kann zu Leistungsproblemen führen, da sie zusätzlichen Speicher erfordern. 🎜🎜

Das obige ist der detaillierte Inhalt vonWie übergebe ich Parameter im C++-Lambda-Ausdruck?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage