C ++ Std_Function

C ++ Std_Function

In C ++ bedeutet STD Standard. C ++ kann eine definierte Klasse haben, aus der Objekte instanziiert werden. Eine normal definierte Funktion ist wie eine Klasse. Der Funktionsaufruf ist wie ein Objekt zur definierten Funktionsklasse. Ein Funktionsaufruf zu unterschiedlichen Zeiten mit unterschiedlichen Argumenten ist wie verschiedene Funktionsobjekte. Jetzt hat C ++ vordefinierte Funktionsstätten, bei denen verschiedene Funktionsobjekte offiziell instanziiert werden können. Ein Funktionsobjekt kann auch als Funktionsaufruf verwendet werden. Es kann ein Rückruffunktionsargument in einem anderen Funktionsaufruf sein. Ein Funktionsobjekt kann den Platz eines Zeigers zu einer normalen Funktion einnehmen.

Die STD :: -Funktion ist eine Funktion Prototype Deklaration mit dem Namen Function () im Header der Bibliothek. Dies bedeutet, dass die Funktion Std :: Funktion oder Header in das Programm einbezogen werden muss. Die STD :: -Funktion ist auch ein Wrapper, das ein Funktionsobjekt als Argument nimmt, um ein anderes Funktionsobjekt zu erstellen.

In diesem Artikel wird C ++ Std :: Funktion erläutert, beginnend mit einigen vordefinierten Funktionsklassen.

Artikelinhalt

- Einige vordefinierte Funktionsklassen

- STD :: Transformation

- STD :: Funktion eigentlich

- Abschluss

Einige vordefinierte Funktionsklassen

Der funktionale Header verfügt über viele vordefinierte Funktionsklassenprototypen in den Kategorien von Reference_Wrapper, arithmetischen Operationen, Vergleiche, Klassenvergleiche_THe_way, logische Operationen, Bitgewise -Operationen, Bindung, polymorphe Funktionswrapper, Sucher und Klassenvorlagen Hash Hash Hash.

In der arithmetischen Kategorie sind zwei der Funktionsklassenprototypen:

Vorlage Struktur negieren;
Und
Vorlage struktur plus;

Hinweis: Eine Struktur ist eine Art Klasse. Der erste würde die Zahlen in einer Liste negieren. Die zweite würde die entsprechenden Zahlen von zwei Listen zusammen hinzufügen, was zu einer Liste der Ergänzungen führt.

STD :: Transformation

In der Algorithmus -Bibliothek gibt es die Funktion STD :: Transform (). Diese Funktion würde den Beginn und Ende eines Vektors erfordern und das Negat -Funktionsobjekt verwenden, um alle Elemente des Vektors zu negieren. Das Negate -Funktionsobjekt ist das letzte Argument des Funktionsanrufs von Transformation (). Ein Prototyp (Syntax) lautet:

Vorlage
Contexpr OutputInator Transformation (InputIterator First1, InputIterator Last1,
Outputiterator -Ergebnis, Unaryoperation op);

wobei Outputiterator ein zweiter Vektor für die resultierenden negierten Zahlen ist. Outputiterator wird ebenfalls zurückgegeben.

Das folgende Programm zeigt die Verwendung der Syntax:

#enthalten
#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
Vektor vtr1 = 1, 2, 3, 4, 5;
VectorVTrout (5);
int main ()

Transformation (vtr1.begin (), vtr1.end (), vTrout.begin (), negate ());
für (int i = 0; iCout<Cout<Rückkehr 0;

Die Ausgabe ist:

-1 -2 -3 -4 -5

Die Richtlinien umfassen, iOstream-, Algorithmus-, Funktions- und Vektor -Header. Der Standard -Namespace wird verwendet. Die Eingangs- und Ausgangsvektoren haben die gleiche Größe. Die STD :: Transform () -Funktion wird ohne Rückgabe verwendet, da das Rückgabelement ein Transformationsfunktionsargument ist. Der For-Loop druckt die negierten Zahlen am Ausgang aus. Ein Rückgabelement für die Transformationsfunktion wäre wie folgt codiert worden:

vTrout.begin () = Transformation (vtr1.begin (), vtr1.end (), vTrout.begin () negieren());

In einer überlasteten Form würde die Funktion Transform () den Anfang und das Ende eines Vektors anfangen. Dann der Beginn eines anderen Vektors und verwenden Sie das A -Plus -Funktionsobjekt, um die entsprechenden Nummern der beiden Vektoren hinzuzufügen, um einen neuen Vektor mit den Summen zu haben. Das Plus -Funktionsobjekt ist das letzte Argument des Transformationsfunktionsaufrufs für diesen Zweck. Der Prototyp (Syntax) lautet:

VorlageKlasse Outputiterator, Klasse Binaryoperation>
ConstExpr OutputInator Transformation (InputIterator1 First1, InputIterator1 Last1,
InputIterator2 First2, OutputIterator Ergebnis, Binaryoperation Binary_OP);

wobei Outputiterator ein dritter Vektor für die resultierenden Summenzahlen ist. Der Outputiterator wird ebenfalls zurückgegeben, dies muss jedoch nicht implementiert werden. Siehe das folgende Programm:

#enthalten
#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
Vektor vtr1 = 1, 2, 3, 4, 5;
Vektor vtr2 = 10, 20, 30, 40, 50;
VectorVTrout (5);
int main ()

Transformation (vtr1.begin (), vtr1.end (), vtr2.begin (), vTrout.begin (), plus ());
für (int i = 0; iCout<Cout<Rückkehr 0;

Die Ausgabe ist:

11 22 33 44 55

Die Richtlinien umfassen, iOstream-, Algorithmus-, Funktions- und Vektor -Header. Der Standard -Namespace wird verwendet. Die beiden Eingangs- und ein Ausgangsvektoren haben die gleiche Größe. Die STD :: Transform () -Funktion wird ohne Rückgabe verwendet, da das Rückgabelement ein Transformationsfunktionsargument ist. Der For-Loop druckt die summierten Zahlen am Ausgang aus.

STD :: Funktion eigentlich

Alle oben genannten haben erklärt, wie ein Funktionsobjekt professionell verwendet werden kann. Es ist dem Programmierer möglich, seine eigene Funktion wie die Funktion von Transform () zu schreiben und sein eigenes Funktionsobjekt zu verwenden, das er geschrieben hat.

STD :: Funktion ist keine große Sache. Es ist eine Wrapper, die jedes Funktionsobjekt als Argument annimmt. In diesem Abschnitt des Artikels wird veranschaulicht.

Ein Funktionsobjekt ist ein abrufbares Objekt. Ein abrufbares Objekt ist jedes Objekt, das wie eine Funktion verwendet werden kann. Ein Beispiel für eine Funktionsklasse wird im folgenden Code angezeigt:

#enthalten
#enthalten
Verwenden von Namespace STD;
struct structfn
int operator () (int a, int b)
int c = a + b;
Rückkehr C;

;
Strukturfnfn

Dies ist der oberste Teil des Programms, der nur die C ++ -Kennfunktion fehlt. Eine Struktur ist wie eine Klasse. Dieser Code hat die Definition einer Struktur, die als Struktur bezeichnet wird (entspricht Klassenname). Die Struktur hat nur ein Mitglied, nämlich der Klammern Operator. Ein Operator ist eine Funktion. Diese Funktion nimmt zwei Ganzzahlen als Argumente und gibt eine weitere Ganzzahl zurück. Es gibt tatsächlich die Summe der beiden Ganzzahlen zurück. Die Struktur, Struktur ist ein Funktionsobjekttyp.

Das instanziierte Objekt der Struktur, Strukturfn ist fn. "Std :: function" selbst ist ein anderer Typ (Klasse). Die letzte Aussage im obigen Code instanziiert ein Objekt von std :: function (wo std :: weggelassen wird, weil es sich in „Verwendung des Namespace STD verwenden“)). Der Name des Standardobjekts für "std :: function" ist f. "F ()" ist ein Objektkonstruktor. In diesem Fall ist das einzige Argument Fn, das ein Objekt der Funktionsklasse strukturiert ist. Diese letzte Anweisung wickelt das Funktionsobjekt um.

Der Operator (Funktion) der Funktionsklasse (Struktur) hat zwei Argumente von Typen int und int int. Es gibt ein weiteres int zurück. Diese Signaturmerkmale können als: int (int, int) dargestellt werden. Deshalb ist die Vorlagenspezialisierung der Funktionskonstruktion .

Die oben verwendete Syntax für den Funktionskonstruktor lautet:

Vorlage Klassenfunktion;

Der Rest des Programms ist die Funktion c ++ main (). Es ist:

int main ()

int z = f (2, 3);
Cout << z << endl;
Rückkehr 0;

Der Ausgang ist 5. F (2,3) wurde anstelle von FN (2,3) verwendet.

Der Vorteil von STD :: Funktion besteht darin.

Das obige Funktionsobjekt kann im Transformationsfunktionsaufruf geändert werden, um als Plus -Funktions -Rückruf zu verwendet zu werden.

Abschluss

Die STD :: Funktion ist vom funktionalen Header, der in das Programm aufgenommen werden muss, damit sie verwendet werden kann. Es wickelt ein Funktionsobjekt um. Das Funktionsobjekt muss sein Argument sein (der Std :: Funktionskonstruktion). Ein Funktionsobjekt ist ein abrufbares Objekt. Ein abrufbares Objekt ist jedes Objekt, das wie eine Funktion verwendet werden kann. Der Vorteil von STD :: Funktion besteht darin.