Maison > développement back-end > C++ > Comment transmettre des paramètres dans une expression C++ Lambda ?

Comment transmettre des paramètres dans une expression C++ Lambda ?

WBOY
Libérer: 2024-06-02 10:53:57
original
754 Les gens l'ont consulté

En passant des paramètres via la liste de capture, les expressions lambda peuvent accéder à des variables externes. En prenant les paramètres de type int comme exemple, la liste de capture est [x](int y), où x est une variable externe et y est un paramètre d'expression lambda. Grâce à cette technique, les expressions lambda peuvent être utilisées dans divers scénarios, tels que la sommation de tableau, où la fonction std::accumulate accumule les éléments du tableau dans une variable avec une valeur initiale de 0, qui est accumulée un par un via l'expression lambda.

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

Expression Lambda C++ : une explication détaillée du passage des paramètres

L'expression Lambda est une fonction anonyme simplifiée qui est largement utilisée en C++ pour définir des fonctions en ligne de manière concise et efficace. Pour qu'une expression lambda accède aux variables externes, une liste de capture est utilisée. Il en va de même pour le passage des paramètres.

Liste de capture passant les paramètres

La liste de capture précède la liste des paramètres d'expression lambda et est entourée de [ et ]. Il peut capturer des variables locales et des variables externes. Pour transmettre des paramètres, vous devez spécifier le type et le nom du paramètre dans la liste de capture. [] 括起来。它可以捕获局部变量和外部变量。要传递参数,需要在捕获列表中指定参数类型和名称。

// 捕获列表传递 int 参数
auto lambda = [x](int y) { return x + y; };
Copier après la connexion

上面的示例定义了一个 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;
}
Copier après la connexion

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

注意事项

  • 捕获 by value 和 by reference: lambda 表达式可以捕获变量 by value 或 by reference。用 = 表示 by value,用 &rrreee
  • L'exemple ci-dessus définit une expression lambda lambda qui reçoit un paramètre de type int nommé y et peut accéder à la variable locale externe x .
  • Cas pratique : additionner à l'aide d'expressions lambda
  • Considérons un scénario dans lequel tous les éléments d'un tableau doivent être additionnés. Cela peut être simplifié en utilisant une expression lambda avec une liste de capture passant des arguments :
  • rrreee Dans cet exemple, la fonction std::accumulate utilise l'expression lambda fournie pour convertir le tableau numbers sont accumulés un par un dans <code>sum avec une valeur initiale de 0. Une expression lambda prend deux paramètres entiers x et y et renvoie leur somme.
  • Notes
    🎜🎜Capture par valeur et par référence : 🎜 Une expression lambda peut capturer des variables par valeur ou par référence. Utilisez = pour représenter par valeur et & pour représenter par référence. 🎜🎜🎜Remarque sur la durée de vie des variables : 🎜 Une expression lambda ne peut accéder qu'aux variables locales qui existent pendant sa durée de vie. 🎜🎜🎜Évitez de capturer des objets volumineux : 🎜La capture d'objets volumineux peut entraîner des problèmes de performances car ils nécessitent de la mémoire supplémentaire. 🎜🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal