Wie tauschst du Vektoren in C aus++?

Wie tauschst du Vektoren in C aus++?
Sei Vtra = 'a', 'b', 'c', 'd', 'e';
Sei Vtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';

Wenn Vtra 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm' und wird

VTRB wird 'a', 'b', 'c', 'd', 'e'

Dann wurden beide Vektoren getauscht. Die Tatsache, dass die Vektoren unterschiedliche Längen haben. Damit zwei Vektoren ausgetauscht werden, müssen sie vom gleichen Typ sein.

Die Vektorklasse hat eine Mitgliedsfunktion, die sich selbst und einen anderen Vektor austauschen kann. Die Algorithmus -Bibliothek hat andere Swap -Funktionen mit unterschiedlichen Namen und zu geänderten Zwecken. Der Hauptunterschied zwischen der Funktion Vektorelement SWAP () und den Algorithmus -Swap -Funktionen besteht darin.

Die Vector -Mitgliedsfunktion SWAP () wird in diesem Artikel erörtert, und die Swap -Funktionen der Algorithmus Library werden ebenfalls besprochen. Der gesamte Vektorcode erfolgt in der Funktion main () für diesen Artikel, sofern nicht anders angegeben.

Artikelinhalt

  • Vektormitglied Swap () Funktion
  • Iterieren mit Iteratoren statt in Indizes
  • Tausch durch Tausch Iteratoren
  • Bereich
  • Tauschbereich mit dem gesamten Vektor
  • Abschluss

Vektormitglied Swap () Funktion
Hohlraumtausch (Vektor &)

Im folgenden Programm werden zwei Vektoren deklariert und ihr Gesamtinhalt werden ausgetauscht:

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

Vektor vtra = 'a', 'b', 'c', 'd', 'e';
Vektor vtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
Vtra.Swap (VTRB);
für (int i = 0; iCout << vtrA[i] << ";

Cout << endl;
für (int i = 0; iCout << vtrB[i] << ";

Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

F g h i j k l m
A b c d e

Der Gesamtinhalt beider Vektoren wurde getauscht. Die Vektorbibliothek muss einbezogen werden, um einen Vektor in C ++ mit der Richtlinie zu verwenden: #include .

Im Programm und in der Funktion main () deklariert das erste Segment die beiden Vektoren. Das nächste Codesegment einer Zeile, die heißt,

Vtra.Swap (VTRB);

tauscht beide Vektoren aus. Es ist klar, dass Swap (VTRB) eine Mitgliedsfunktion des Vektors VTRA ist. Die beiden Code -Segmente, die nach dem ausgetauschten Inhalt angezeigt werden.

Iterieren mit Iteratoren statt in Indizes

Ein Vektor kann mit Iteratoren anstelle des Index iteriert werden. Das folgende Programm zeigt, wie dies für den ausgetauschten Vektorinhalt erfolgen kann:

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

Vektor vtra = 'a', 'b', 'c', 'd', 'e';
Vektor vtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
Vtra.Swap (VTRB);
für (Vektor:: Iterator p = vtra.Start(); P != vtra.Ende(); p ++)
Cout << *p << ";

Cout << endl;
für (Vektor:: iterator q = vtrb.Start(); Q != vtrb.Ende(); Q ++)
Cout << *q << ";

Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

F g h i j k l m
A b c d e

Beachten Sie die Art und Weise, wie der Haupt-Iterator in jedem Fürschleifen initialisiert wird. Beachten Sie die Bedingung in jeder Fürschleife. Der Haupt-Iterator in jeder für die Schleife wird genauso inkrementiert wie der Index.

Tausch durch Tausch Iteratoren

Die Algorithmus -Bibliothek hat eine Swap -Funktion namens iTer_swap (). Diese Funktion tauscht die beiden Haupt -Iteratoren von zwei unabhängigen Vektoren aus. Die Syntax ist:

void iter_swap (Forwarditerator1 a, Forwarditerator2 B)

Das folgende Programm zeigt, wie diese Funktion Algorithmus-ire_swap () angewendet werden kann:

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

Vektor vtra = 'a', 'b', 'c', 'd', 'e';
Vektor vtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
Vektor:: iterator u = vtra.Start();
Vektor:: iterator v = vtrb.Start();
tauschen (u, v);
für (u = u; u != vtrb.Ende(); U ++)
Cout << *u << ";

Cout << endl;
für (v = v; v != vtra.Ende(); v ++)
Cout << *v << ";

Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

F g h i j k l m
A b c d e

Beachten Sie, dass die Algorithmusbibliothek enthalten sein musste. Das vorgestellte Codesegment für dieses Programm lautet:

Vektor:: iterator u = vtra.Start();
Vektor:: iterator v = vtrb.Start();
tauschen (u, v);

Für die erste dieser Aussagen verweist u auf 'a' des Vektors, VTRA. Für die zweite Aussage verweist V auf 'f' des Vektors, VTRB. Die dritte Aussage tauscht den Zeig. Damit zeigt Sie jetzt auf 'f' von VTRB und Vpunkten auf 'A' von VTRA. Sie können jetzt verwendet werden, um durch die Elemente von VTRB zu iterieren, und V kann jetzt verwendet werden, um durch die Elemente von VTRA zu iterieren.

Bereich

Für den Vektor,

'F', 'g', 'h', 'i', 'j', 'k', 'l', 'm'

der Ablauf,

'H', 'I', 'J', 'K'

ist eine Reichweite.

Die Iterationen für diesen Bereich können wie folgt erhalten werden:

Vektor vtr = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
Vektor:: iterator itb = vtr.Start();
ITB ++; ITB ++;
Vektor:: iterator ite = vtr.Ende();
ite--; ite--; ite--;
Cout << *itB << " << *itE << endl;

Die Ausgabe ist:

H k

Der Ausdruck VTR.begin () gibt einen Iterator zurück, der auf 'F' verweist '. Der Ausdruck VTR.End () gibt einen Iterator zurück, der kurz nach dem letzten Element des Vektors zeigt. Der Iterator muss zweimal inkrementiert werden, um den Iterator zu machen, der auf 'F' verweist, um auf 'H' zu verweisen, zu verweisen, auf "H" zu verweisen. Damit den Iterator genau über den Vektor hinaus zeigt, um auf 'k' zu verweisen, muss Iterator dreimal abkrementiert werden und nicht zweimal. Wenn es beim ersten Mal abgelehnt wird, weist es auf das letzte Element hin, 'M'. Wenn es das zweite Mal dekrementiert wird, weist es auf das Element hin, das zuvor 'l'. Und wenn es das dritte Mal abgeschlossen hat, weist es auf das Element hin, 'k'. *ITB gibt den Wert des Elements zurück, auf das ITB zuletzt zeigt. *ITE gibt den Wert des Elements zurück, auf das es zuletzt zeigte.

Der Bereich von Iteratoren lautet also:

[ITB, ITE)

')' Am Ende der Reichweite bedeutet Notation, dass, wenn der Bereich in einen anderen Vektor eingebaut oder mit einem anderen Vektor ausgetauscht werden soll, der letzte Wert des von ITE dargestellten Bereichs nicht beteiligt ist. Das heißt, nur Elemente von ITB zum einen kurz zuvor werden es kopiert oder getauscht.

Tauschbereich mit dem gesamten Vektor

Die Algorithmus -Bibliothek hat eine Funktion, um einen Bereich in einem Vektor mit einem anderen gesamten Vektor auszutauschen. Die Syntax für die Funktion lautet:

ForwardIterator2 SWAP_RANGES (Vorwärtsfahrer1 First1, Forwarditerator1 Last1, Forwarditerator2 First2)

First1 repräsentiert den Iterator, der auf das erste Element des Bereichs verweist. Last1 repräsentiert den Iterator, der auf das letzte Element des Bereichs verweist. Dieses letzte Element ist nur ein Trennzeichen; Es wird nicht am Austausch beteiligt sein. First2 zeigt auf das erste Element des Einfügungsvektors. Die Funktion gibt einen Iterator zurück, der auf das nächste Element verweist und nicht den gesamten Vektor ausgetauscht hat. Siehe folgende Code. Das folgende Programm zeigt diesen Tausch mit der Funktion SWAP_RANGES ().

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

Vektor vtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
Vektor:: iterator itb = vtrb.Start();
ITB ++; ITB ++;
Vektor:: iterator ite = vtrb.Ende();
ite--; ite--; ite--;
Vektor vtra = 'a', 'b', 'c', 'd', 'e';
Vektor:: iterator itr = swap_ranges (itb, ite, vtra.Start());
für (int i = 0; iCout << vtrB[i] << ";
Cout << endl;
Cout << *itR << endl;
für (int i = 0; iCout << vtrA[i] << ";
Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

F g a b c k l m
D
H i j d e

Beachten Sie, dass der gesamte Vektor nicht getauscht wurde. Stattdessen sind es nur die ersten drei Werte des gesamten Vektors, der mit den dritten, vierten und fünften Werten von VTRB getauscht wurde. Das sechste Element von VTRB war nicht beteiligt, und das wurde erwartet.

VTRA hat 5 Elemente, während VTRB 8 Elemente hat. Um den gesamten Vektor wirklich auszutauschen, muss VTRA von 5 Elementen, die Sequenz in VTRB betroffen, 6 Elemente haben (wobei das sechste Element nur ein Grenzwert ist). Das folgende Programm zeigt dies:

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

Vektor vtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
Vektor:: iterator itb = vtrb.Start();
ITB ++; ITB ++;
Vektor:: iterator ite = vtrb.Ende();
ite--;
Vektor vtra = 'a', 'b', 'c', 'd', 'e';
Vektor:: iterator itr = swap_ranges (itb, ite, vtra.Start());
für (int i = 0; iCout << vtrB[i] << ";
Cout << endl;
Cout << *itR << endl;
für (int i = 0; iCout << vtrA[i] << ";
Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

F g a b c d e m
H i j k l

Diesmal wurden alle 5 Werte von VTRA mit dem dritten, vierten, fünften, sechsten und siebten Werten des VTRB getauscht. Um einen ganzen Vektor wirklich auszutauschen, sollte der längere Vektor die entsprechende Anzahl von Elementen haben (in Sequenz).

Abschluss

Wenn Sie zwei Vektoren austauschen müssen. Damit Vektoren ausgetauscht werden müssen, müssen sie vom gleichen Typ sein. C ++ hat eine Mitgliedsfunktion, um dies zu tun. Dies bedeutet, dass die Funktion eines Vektors SWAP () den anderen Vektor als Argument nimmt und dann den Inhalt ausgetauscht hat. Wenn der Programmierer mehr Tauschfunktionen wünscht, z. B. die Iteratoren auszutauschen oder einen Bereich in einem Vektor mit der Gesamtliste eines anderen Vektors auszutauschen, muss er die Algorithmus -Bibliothek verwenden.