Setzen Sie die Kreuzung in C ++

Setzen Sie die Kreuzung in C ++
Im Folgenden finden Sie Zwei-Charakter-Sets:
p = 'h', 'g', 'f', 'e', ​​'d'
q = 'j', 'i', 'h', 'g', 'f'

In C ++ wäre der Schnittpunkt dieser beiden Sätze:

r = 'f', 'g', 'H'

in aufsteigender Reihenfolge anhand der Standardeinstellungen angeordnet. Die Schnittstelle anderer festgelegter Typen sind möglich, z.

Die festgelegte Klasse in der C ++ - Set -Bibliothek, die in das Programm für die festgelegte Arbeit aufgenommen werden sollte, hat keine Mitgliedsfunktion für die Kreuzung. Um die Schnittstelle von Sätzen zu erhalten.

Die C ++ - Algorithmus -Bibliothek hat eine Reihe von überlasteten Set_intersection -Funktionen. In diesem Artikel werden nur die einfachsten zwei erklärt. Bevor die Erklärungen beginnen.

Outputiterator und Forwarditerator

Ein Iterator ist ein Klassenzeiger. Ein Outputiterator ist ein Iterator, dem ein Wert mit dem Dereferenced -Ausdruck zugeordnet werden kann. Zum Beispiel, wenn der Iterator ich für Ganzzahlen ist, dann;

*i = 5;

Würde ich auf den Speicherort hinweisen, der den Wert hat, 5, 5.

Ein InputIterator ist ein Iterator, dessen Derferene Ausdruck den Wert zurückgeben würde, auf den der Iterator zeigt. Wenn der Iterator beispielsweise ich für Ganzzahlen ist und auf den Speicherort zeigt, der die Nummer 7 hat, dann;

int num = *i;

würde num den Wert halten, 5.

Ein Forwarditerator ist eine ausgearbeitete Form des Eingangs -Iterators.

Bereiche

Wenn die für einen Satz vorgesehenen Werte in den Satz eingefügt wurden, werden die Werte basierend auf Standardeinstellungen in aufsteigender Reihenfolge sortiert. Mit Sets können zwei Vorwärts -Iteratoren verwendet werden, um eine Reihe von Elementen im Satz zu identifizieren. Dieser Artikel befasst sich mit dem gesamten Bereich des Satzes. Das folgende Programm zeigt, wie Sie die Vorwärts -Iteratoren erhalten, die den gesamten Bereich eines Satzes darstellen:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

Satz p = 'h', 'g', 'f', 'e', ​​'d';
Satz:: Iterator zuerst = p.Start();
Satz:: iterator last = p.Ende();
Rückkehr 0;

Beachten Sie die Verwendung der Mitgliederfunktionen der SET -Klasse begin () und end ().

Zum Zwecke der Schnittstelle von zwei vollständigen Sätzen wird es First1 und Last1 für den ersten Satz geben. und First2 und Last2 für den zweiten Satz; Für beide vollständigen Bereiche.

Iterator ausgeben

Die in diesem Artikel berücksichtigten Two set_intersection -Funktionen geben einen Ausgabe -Iterator zurück. Leider hat die SET -Klasse keinen Ausgangs -Iterator. Nun, die Vektorklasse hat. Dies bedeutet, dass der Ausgabe -Iterator der Vektorklasse, der einfach als Iterator bezeichnet wird. Eine weitere gute Nachricht ist, dass dieser Vektor -Iterator sowohl als Ausgangs -Iterator als auch als Eingaberator dienen kann. Vergessen Sie nicht, den Vektor aufzunehmen, um ihn im Programm zu verwenden.

Die oben genannten zwei oben genannten SET_intersection -Funktionen können nun diskutiert werden.

Basic set_intersection -Funktion

Die Syntax für diese Funktion in der Algorithmus -Bibliothek lautet:

Vorlage
ConstExpr Outputiterator
set_intersection (InputIterator1 First1, InputIterator1 Last1,
InputIterator2 First2, InputIterator2 Last2, OutputIterator -Ergebnis)

Outputiterator ist der von der Vektorklasse erhaltene Rückgaberator -Iterator. Es würde kurz nach dem letzten praktischen Element im Vektor zeigen. Dies bedeutet. Das letzte Argumentgebnis ist der Ausgangs -Iteratorzeiger, der auf den Beginn des Vektors zeigt, der die Schnittstelle von Sätzen erhält.

Mit dem Vektor kann der Ausgabe-Iterator, der auch ein Eingangs-Iterator ist, zurückgegeben werden. Mit der vorangegangenen Einführung für diesen Artikel wird der Rest der Parameter der Funktion selbstplanend. Das folgende Programm zeigt, wie diese Funktion verwendet wird:

#enthalten
#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

Satz p = 'h', 'g', 'f', 'e', ​​'d';
Satz:: iterator first1 = p.Start(); set :: iterator last1 = p.Ende();
Satz q = 'j', 'i', 'h', 'g', 'f';
Satz:: iterator first2 = q.Start(); set :: iterator last2 = q.Ende();
Vektor vtr (10);
Vektor:: iterator outit = set_intersection (First1, Last1, First2, Last2, VTR.Start());
vtr.Größenänderung (Outit - VTR.Start());
für (outit = vtr.Start(); Outit != vtr.Ende(); Outit ++)
Cout << *outIt << ", ";
Cout << endl;
Rückkehr 0;

Beachten Sie, dass der Vektor geändert werden musste, um nur die Elemente der Kreuzung zu enthalten, nachdem die Funktion set_intersection () aufgerufen worden war. Die Ausgabe ist:

F, g, h,

Basic set_intersection -Funktion mit benutzerdefiniertem Vergleich

Die Syntax für diese Funktion in der Algorithmus -Bibliothek lautet:

Vorlage
ConstExpr Outputiterator
set_intersection (InputIterator1 First1, InputIterator1 Last1,
InputIterator2 First2, InputIterator2 last2,
OutputIterator -Ergebnis, Compare comp);

Outputiterator ist der von der Vektorklasse erhaltene Ausgangs -Iterator. Es würde kurz nach dem letzten praktischen Element des Vektors zeigen. Dies bedeutet. Das letzte, aber ein Argumentgebnis ist der Ausgangs-Iteratorzeiger, der auf den Beginn des Vektors zeigt, der die Schnittstelle von Sätzen erhält.

Mit dem Vektor kann der Ausgabe-Iterator zurückgegeben werden, der ebenfalls ein Eingangs-Iterator ist.

Comp, ist eine Programmierer definierte Funktion. Es kann sein:

bool comp (char a, char b)
wenn ein != b)
zurückkehren;
anders
falsch zurückgeben;

Diese Comp () -Funktion gibt wahr oder falsch zurück. Aus der Einführung dieses Artikels oben sind die restlichen Parameter der Funktion set_intersection selbsterklärend.

Mit dem oben genannten Programmheader verwendet die folgende Funktion main () die obige Comp () -Funktion erfolgreich.

int main ()

Satz p = 'h', 'g', 'f', 'e', ​​'d';
Satz:: iterator first1 = p.Start(); Satz:: iterator last1 = p.Ende();
Satz q = 'j', 'i', 'h', 'g', 'f';
Satz:: iterator first2 = q.Start(); Satz:: iterator last2 = q.Ende();
Vektor vtr (10);
Vektor:: iterator outit = set_intersection (First1, Last1, First2, Last2, VTR.begin (), comp);
vtr.Größenänderung (Outit - VTR.Start());
für (outit = vtr.Start(); Outit != vtr.Ende(); Outit ++)
Cout << *outIt << ", ";
Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

F, g, h,

das Gleiche wie vorher.

Abschluss

Die festgelegte Klasse in der C ++ - Set -Bibliothek, die in das Programm für die festgelegte Arbeit aufgenommen werden sollte, hat keine Mitgliedsfunktion für die Kreuzung. Um die Schnittstelle von Sätzen zu erhalten.

Die C ++ - Algorithmus -Bibliothek hat eine Reihe von überlasteten Set_intersection -Funktionen. Ab Januar 2022 wurden oben zwei dieser Funktionen, die höchstwahrscheinlich von Ihrem Compiler implementiert wurden. Compiler müssen weiterhin den Rest der überlasteten set_intersection () -Funktionen in der C ++ - Spezifikation implementieren.