Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah perbezaan antara objek fungsi STL dan ungkapan lambda C++?

Apakah perbezaan antara objek fungsi STL dan ungkapan lambda C++?

PHPz
PHPzasal
2024-04-25 12:18:01561semak imbas

Objek fungsi dan ungkapan lambda ialah kedua-dua alat untuk mencipta fungsi tanpa nama. Perbezaan utama ialah: Sintaks: Objek fungsi menggunakan definisi kelas, manakala ungkapan lambda menggunakan sintaks []. Skop: Objek fungsi boleh digunakan di luar kelas, manakala ungkapan lambda terhad kepada skop definisi. Tangkap: Objek fungsi tidak boleh menangkap pembolehubah luaran, tetapi ungkapan lambda boleh menangkap melalui senarai tangkapan. Overhed: Overhed penciptaan objek fungsi adalah rendah, overhed ungkapan lambda adalah tinggi. Kebolehgunaan semula: Objek fungsi biasanya boleh diguna semula, ungkapan lambda biasanya sekali guna.

STL 函数对象与 C++ lambda 表达式的区别是什么?

Perbezaan antara objek fungsi STL dan ungkapan lambda C++

Objek fungsi dan ungkapan lambda ialah kedua-dua alat yang digunakan untuk mencipta fungsi tanpa nama dalam C++. Walaupun mereka mempunyai persamaan, terdapat juga perbezaan utama:

Syntax

  • Objek fungsi: Gunakan kelas untuk mengisytiharkan.
  • ungkapan lambda: ditakrifkan menggunakan [] sintaks.

Skop

  • Objek Fungsi: Boleh digunakan di luar kelas.
  • ungkapan lambda: hanya sah dalam skop yang ditakrifkan.

Tangkap

  • Objek fungsi: Tidak boleh menangkap pembolehubah luaran.
  • Ekspresi lambda: Pembolehubah luaran boleh ditangkap melalui senarai tangkapan.

Overhead

  • Objek fungsi: Overhead ciptaan rendah.
  • Ekspresi lambda: Mahal untuk dibuat kerana ia memerlukan penjanaan penutupan.

Kebolehgunaan semula

  • Objek fungsi: biasanya boleh diguna semula.
  • Ekspresi lambda: Biasanya penggunaan sekali sahaja.

Kes Praktikal

Katakan kita mempunyai tatasusunan integer dan kita ingin mencari elemen pertama yang memenuhi syarat tertentu (contohnya, elemen pertama lebih besar daripada 10).

Menggunakan objek fungsi:

class GreaterThan10 {
public:
    bool operator()(int x) { return x > 10; }
};

int main() {
    int arr[] = {1, 5, 7, 12, 14};
    auto found = find_if(begin(arr), end(arr), GreaterThan10());
    if (found != end(arr)) {
        cout << "First number greater than 10: " << *found << endl;
    }
    return 0;
}

Menggunakan ungkapan lambda:

int main() {
    int arr[] = {1, 5, 7, 12, 14};
    auto found = find_if(begin(arr), end(arr), [](int x) { return x > 10; });
    if (found != end(arr)) {
        cout << "First number greater than 10: " << *found << endl;
    }
    return 0;
}

Dalam contoh ini, ungkapan lambda digunakan untuk mencipta fungsi tanpa nama yang menentukan sama ada integer lebih besar daripada 10.

Atas ialah kandungan terperinci Apakah perbezaan antara objek fungsi STL dan ungkapan lambda C++?. 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