Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk lulus parameter dalam ungkapan C++ Lambda?

Bagaimana untuk lulus parameter dalam ungkapan C++ Lambda?

WBOY
WBOYasal
2024-06-02 10:53:57677semak imbas

Dengan menghantar parameter melalui senarai tangkapan, ungkapan lambda boleh mengakses pembolehubah luaran. Mengambil parameter jenis int sebagai contoh, senarai tangkapan ialah [x](int y), dengan x ialah pembolehubah luaran dan y ialah parameter ungkapan lambda. Menggunakan teknik ini, ungkapan lambda boleh digunakan dalam pelbagai senario, seperti penjumlahan tatasusunan, di mana fungsi std::accumulate mengumpul elemen tatasusunan menjadi pembolehubah dengan nilai awal 0, yang terkumpul satu demi satu melalui ungkapan lambda.

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

C++ Ungkapan Lambda: Penjelasan terperinci tentang parameter yang lulus

Ungkapan Lambda ialah fungsi tanpa nama dipermudah yang digunakan secara meluas dalam C++ untuk mentakrifkan fungsi sebaris secara ringkas dan cekap. Untuk ungkapan lambda untuk mengakses pembolehubah luaran, senarai tangkapan digunakan. Perkara yang sama berlaku untuk lulus parameter.

Tangkap parameter lulus senarai

Senarai tangkapan mendahului senarai parameter ungkapan lambda dan disertakan dengan [ dan ]. Ia boleh menangkap pembolehubah tempatan dan pembolehubah luaran. Untuk lulus parameter, anda perlu menentukan jenis dan nama parameter dalam senarai tangkapan. [] 括起来。它可以捕获局部变量和外部变量。要传递参数,需要在捕获列表中指定参数类型和名称。

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

上面的示例定义了一个 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;
}

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

注意事项

  • 捕获 by value 和 by reference: lambda 表达式可以捕获变量 by value 或 by reference。用 = 表示 by value,用 &rrreee
  • Contoh di atas mentakrifkan ungkapan lambda lambda yang menerima parameter jenis int bernama y dan boleh mengakses pembolehubah Setempat luaran x .
  • Kes praktikal: menjumlahkan menggunakan ungkapan lambda
  • Pertimbangkan senario di mana semua elemen dalam tatasusunan perlu dijumlahkan. Ini boleh dipermudahkan dengan menggunakan ungkapan lambda dengan senarai tangkapan yang menghantar argumen:
  • rrreee Dalam contoh ini, fungsi std::accumulate menggunakan ungkapan lambda yang disediakan untuk menukar tatasusunan nombor dikumpul satu persatu menjadi sum dengan nilai awal 0. Ungkapan lambda mengambil dua parameter integer x dan y dan mengembalikan jumlahnya.
  • Nota
    🎜🎜Tangkap mengikut nilai dan rujukan: 🎜 Ungkapan lambda boleh menangkap pembolehubah mengikut nilai atau rujukan. Gunakan = untuk mewakili mengikut nilai dan & untuk mewakili melalui rujukan. 🎜🎜🎜Nota tentang hayat pembolehubah: 🎜 Ungkapan lambda hanya boleh mengakses pembolehubah tempatan yang wujud sepanjang hayatnya. 🎜🎜🎜Elakkan menangkap objek besar: 🎜Merakam objek besar boleh menyebabkan masalah prestasi kerana ia memerlukan memori tambahan. 🎜🎜

Atas ialah kandungan terperinci Bagaimana untuk lulus parameter dalam ungkapan C++ Lambda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn