Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der Unterschied zwischen STL-Funktionsobjekten und C++-Lambda-Ausdrücken?

Was ist der Unterschied zwischen STL-Funktionsobjekten und C++-Lambda-Ausdrücken?

PHPz
PHPzOriginal
2024-04-25 12:18:01531Durchsuche

Funktionsobjekte und Lambda-Ausdrücke sind beides Werkzeuge zum Erstellen anonymer Funktionen. Die Hauptunterschiede sind: Syntax: Funktionsobjekte verwenden Klassendefinitionen, während Lambda-Ausdrücke die []-Syntax verwenden. Geltungsbereich: Funktionsobjekte können außerhalb der Klasse verwendet werden, während Lambda-Ausdrücke auf den Definitionsbereich beschränkt sind. Erfassung: Funktionsobjekte können keine externen Variablen erfassen, Lambda-Ausdrücke können jedoch über Erfassungslisten erfassen. Overhead: Der Overhead für die Erstellung von Funktionsobjekten ist gering, der Overhead für Lambda-Ausdrücke ist hoch. Wiederverwendbarkeit: Funktionsobjekte sind normalerweise wiederverwendbar, Lambda-Ausdrücke sind normalerweise nur für den einmaligen Gebrauch bestimmt.

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

Der Unterschied zwischen STL-Funktionsobjekten und C++-Lambda-Ausdrücken

Funktionsobjekte und Lambda-Ausdrücke sind beides Werkzeuge, die zum Erstellen anonymer Funktionen in C++ verwendet werden. Obwohl sie Ähnlichkeiten aufweisen, gibt es auch wesentliche Unterschiede:

Syntax

  • Funktionsobjekte: Verwenden Sie Klassen zum Deklarieren.
  • Lambda-Ausdruck: definiert mit []-Syntax.

Scope

  • Funktionsobjekt: Kann außerhalb der Klasse verwendet werden.
  • Lambda-Ausdrücke: sind nur innerhalb des Geltungsbereichs gültig, in dem sie definiert sind.

Erfassung

  • Funktionsobjekt: Externe Variablen können nicht erfasst werden.
  • Lambda-Ausdruck: Externe Variablen können über Erfassungslisten erfasst werden.

Overhead

  • Funktionsobjekte: Geringer Erstellungsaufwand.
  • Lambda-Ausdruck: Die Erstellung ist teuer, da ein Abschluss generiert werden muss.

Wiederverwendbarkeit

  • Funktionsobjekte: sind in der Regel wiederverwendbar.
  • Lambda-Ausdruck: Normalerweise eine einmalige Verwendung.

Praktischer Fall

Angenommen, wir haben ein Array von ganzen Zahlen und möchten das erste Element finden, das eine bestimmte Bedingung erfüllt (z. B. das erste Element größer als 10).

Verwenden eines Funktionsobjekts:

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;
}

Verwenden eines Lambda-Ausdrucks:

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;
}

In diesem Beispiel wird ein Lambda-Ausdruck verwendet, um eine anonyme Funktion zu erstellen, die bestimmt, ob eine Ganzzahl größer als 10 ist.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen STL-Funktionsobjekten und C++-Lambda-Ausdrücken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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