Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Dalam senario apakah ungkapan lambda C++ sangat berguna?

Dalam senario apakah ungkapan lambda C++ sangat berguna?

王林
王林asal
2024-06-05 12:15:00722semak imbas

C++ Lambda 表达式在哪些场景中尤为有用?

C++ Lambda Expressions: Alat berkuasa untuk senario tertentu

Pengenalan

Ekspresi Lambda ialah fungsi tanpa nama yang diperkenalkan dalam C++ yang membolehkan anda mencipta fungsi sebaris pendek. Mereka hebat untuk mengendalikan tugas mudah yang tidak memerlukan pengisytiharan atau penamaan berasingan.

Sintaks Lambda

Ekspresi Lambda menggunakan sintaks berikut:

[capture-list](parameters) -> return-type { body }
  • senarai tangkapan: Nyatakan pembolehubah untuk ditangkap.
  • parameter: Nyatakan parameter fungsi.
  • return-type: Nyatakan jenis pemulangan fungsi.
  • badan: Tentukan tingkah laku fungsi.

Penggunaan

Ekspresi Lambda amat berguna dalam senario berikut:

  • Fungsi panggil balik objek: diluluskan sebagai fungsi panggil balik ke fungsi atau objek lain.
  • Algoritma STL: diluluskan sebagai parameter kepada algoritma perpustakaan standard, seperti std::sortstd::find.
  • Pengendalian acara: Menjawab input pengguna atau acara sistem (cth., dalam rangka kerja GUI).
  • Penutupan: Tangkap pembolehubah untuk mencipta penutupan yang berterusan dalam skop di luar fungsi.

Praktikal Case

1. ungkapan Cari nombor pertama yang lebih besar daripada 5:

#include <iostream>
#include <string>

using namespace std;

int main() {
  string str = "hello";
  transform(str.begin(), str.end(), str.begin(), [](char c) { return toupper(c); });
  cout << str << endl;  // 输出:HELLO

  return 0;
}

3 Sebagai penutupan

Kod berikut menunjukkan cara membuat penutupan menggunakan ungkapan lambda:

#include <iostream>
#include <vector>

using namespace std;

int main() {
  vector<int> nums = {1, 3, 5, 7, 9};
  auto it = find_if(nums.begin(), nums.end(), [](int n) { return n > 5; });
  if (it != nums.end()) {
    cout << "找到了第一个大于 5 的数字:" << *it << endl;  // 输出:7
  } else {
    cout << "没有找到大于 5 的数字" << endl;
  }

  return 0;
}

Nota:

Berbanding dengan fungsi Lambda, terdapat had berikut:

Mereka tidak mempunyai ruang nama bebas.

Mereka tidak boleh dimuat semula.

Mereka tidak boleh mempunyai parameter lalai.

Apabila menggunakan ungkapan lambda, timbangkan kelebihan dan hadnya dengan teliti untuk menentukan sama ada ia adalah pilihan terbaik untuk senario khusus anda.

    Atas ialah kandungan terperinci Dalam senario apakah ungkapan lambda C++ sangat berguna?. 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