Jak zamienić wektory w C++?

Jak zamienić wektory w C++?
Niech vtra = „a”, „b”, „c”, „d”, „e”;
Niech vtrb = „f”, „g”, „h”, „i”, „j”, „k”, „l”, „m”;

Jeśli vtra staje się „f”, „g”, „h”, „i”, „j”, „k”, „l”, „m” i

vtrb staje się „a”, „b”, „c”, „d”, „e”

Wtedy oba wektory zostały zamienione. Fakt, że wektory mają różną długości, tak naprawdę nie stanowi problemu. Aby zamienić dwa wektory, muszą być tego samego typu.

Klasa wektorowa ma funkcję członkowską do zamiany i innego wektora. Biblioteka algorytmu zawiera inne funkcje swap o różnych nazwach i do zmodyfikowanych celów. Główną różnicą między funkcją Wektor Member Swap () a funkcjami swap algorytmem jest to, że podczas gdy funkcja członka zamienia się w wektorze z innym wektorem, funkcje zamienników biblioteki algorytmu, każda zamiana dwóch niezależnych wektorów.

Funkcja członka wektorowego, swap (), zostanie omówiona w tym artykule, a funkcje swap biblioteki algorytmu zostaną również omówione. Cały kod wektorowy odbywa się w funkcji Main () dla tego artykułu, chyba że wskazano inaczej.

Treść artykułu

  • Funkcja wektorowa swap ()
  • Iteracja z iteratorami zamiast indeksów
  • Zamiana przez zamianę iteratorów
  • Zakres
  • Zakres zamiany z całym wektorem
  • Wniosek

Funkcja wektorowa swap ()
HOID SWAP (wektor i)

W poniższym programie zadeklarowane są dwa wektory, a ich całkowita zawartość jest zamieniona:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

wektor vtra = „a”, „b”, „c”, „d”, „e”;
wektor vtrb = „f”, „g”, „h”, „i”, „j”, „k”, „l”, „m”;
Vtra.swap (vtrb);
dla (int i = 0; iCout << vtrA[i] << ";

Cout << endl;
dla (int i = 0; iCout << vtrB[i] << ";

Cout << endl;
powrót 0;

Wyjście to:

F g h i j k l m
A B C D E

Całkowita zawartość obu wektorów została zamieniona. Biblioteka wektorowa musi zostać uwzględniona, aby użyć wektora w C ++, z dyrektywą: #include .

W programie i w funkcji Main () pierwszy segment deklaruje dwa wektory. Następny segment kodu jednej linii,

Vtra.swap (vtrb);

zamienia oba wektory. Oczywiste jest, że Swap (VTRB) jest funkcją członkowską wektora, VTRA. Dwa segmenty kodu pojawiające się po wyświetleniu wymienionej zawartości.

Iteracja z iteratorami zamiast indeksów

Wektor może być iterowany z iteratorami zamiast indeksu. Poniższy program pokazuje, w jaki sposób można to zrobić dla zawartości wymienionego wektora:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

wektor vtra = „a”, „b”, „c”, „d”, „e”;
wektor vtrb = „f”, „g”, „h”, „i”, „j”, „k”, „l”, „m”;
Vtra.swap (vtrb);
dla (wektor:: iterator p = vtra.zaczynać(); P != VTRA.koniec(); P ++)
Cout << *p << ";

Cout << endl;
dla (wektor:: iterator q = vtrb.zaczynać(); Q != VTRB.koniec(); Q ++)
Cout << *q << ";

Cout << endl;
powrót 0;

Wyjście to:

F g h i j k l m
A B C D E

Zwróć uwagę na sposób inicjalizowania głównego iteratora w każdej formie pętli. Zwróć uwagę na to, że klimat w każdej za pętla. Główny iterator w każdej za pętla jest zwiększany, podobnie jak indeks.

Zamiana przez zamianę iteratorów

Biblioteka algorytmu ma funkcję swap o nazwie ITER_SWAP (). Ta funkcja zamienia dwa główne iteratory dwóch niezależnych wektorów. Składnia to:

void iTer_Swap (Forwarditerator1 A, Forwarditerator2 B)

Poniższy program pokazuje, w jaki sposób można zastosować tę funkcję algorytmu-Iter_Swap ():

#include>
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

wektor vtra = „a”, „b”, „c”, „d”, „e”;
wektor vtrb = „f”, „g”, „h”, „i”, „j”, „k”, „l”, „m”;
wektor:: iterator u = vtra.zaczynać();
wektor:: iterator v = vtrb.zaczynać();
zamiana (u, v);
dla (u = u; u != VTRB.koniec(); u ++)
Cout << *u << ";

Cout << endl;
dla (v = v; v != VTRA.koniec(); v ++)
Cout << *v << ";

Cout << endl;
powrót 0;

Wyjście to:

F g h i j k l m
A B C D E

Zauważ, że biblioteka algorytmu musiała zostać uwzględniona. Polecany segment kodu tego programu to:

wektor:: iterator u = vtra.zaczynać();
wektor:: iterator v = vtrb.zaczynać();
zamiana (u, v);

W pierwszym z tych stwierdzeń u wskazuje na „A” wektora, VTRA. W drugim stwierdzeniu V wskazuje na „F” wektora, VTRB. Trzecie stwierdzenie zamienia się w wskazanie. Wraz z nim wskazuje teraz „F” VTRB i V wskazuje na „A” VTRA. możesz teraz użyć do iteracji przez elementy VTRB, a V można teraz użyć do iteracji przez elementy VTRA.

Zakres

Dla wektora,

„F”, „g”, „h”, „i”, „j”, „k”, „l”, „m”

sekwencja,

„H”, „I”, „J”, „K”

to zasięg.

Iteracje dla tego zakresu można uzyskać w następujący sposób:

wektor vtr = „f”, „g”, „h”, „i”, „j”, „k”, „l”, „m”;
wektor:: iterator ITB = vtr.zaczynać();
ITB ++; ITB ++;
wektor:: iterator Ite = vtr.koniec();
Ite--; Ite--; Ite--;
Cout << *itB << " << *itE << endl;

Wyjście to:

H k

Wyrażenie, vtr.początek (), zwraca iterator, który wskazuje na „f”. Wyrażenie, vtr.end (), zwraca iterator, który wskazuje tuż po ostatnim elemencie wektora. Iterator musi być dwukrotnie zwiększany, aby iterator wskazuje na „f”, aby wskazać „h”. Aby iterator, który wskazuje, tuż poza wektorem, wskazując na „k”, że iterator musi zostać zmniejszony trzy razy, a nie dwa razy. Kiedy jest on zmniejszony za pierwszym razem, wskazuje ostatni element „M”. Po zmniejszeniu po raz drugi wskazuje na element wcześniej: „L”. A po zmniejszeniu trzeciego razu wskazuje na element „k”. *ITB zwraca wartość elementu ITB, na który ostatnio wskazywał. *ITE zwraca wartość elementu ITE, na który ostatnio wskazywał.

Tak więc zakres iteratorów to:

[ITB, Ite)

') „Na końcu notacji zasięgu oznacza, że ​​jeśli zakres ma być zamontowany w innym wektorze lub zamieniona na inny wektor, ostatnia wartość zakresu, reprezentowana przez ITE, nie będzie zaangażowana. To znaczy tylko elementy od ITB na jeden tuż wcześniej, ITE zostanie skopiowane lub zamienione.

Zakres zamiany z całym wektorem

Biblioteka algorytmu ma funkcję zamiany zakresu w jednym wektorze z innym wektorem. Składnia funkcji to:

Forwarditerator2 Swap_Ranges (Forwarditerator1 First1, Forwarditerator1 Last1, Forwarditerator2 First2)

First1 reprezentuje iterator, który wskazuje na pierwszy element zakresu. Last1 reprezentuje iterator, który wskazuje ostatni element zakresu. Ten ostatni element jest tylko ogranicznikiem; Nie będzie zaangażowany w zamianę. First2 wskazuje na pierwszy element wektora wstawionego. Funkcja zwraca iterator, który wskazuje na następny element, nie zamieniając całego wektora - patrz następujący kod. Poniższy program ilustruje tę zamianę za pomocą funkcji SWAP_RANGES ().

#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

wektor vtrb = „f”, „g”, „h”, „i”, „j”, „k”, „l”, „m”;
wektor:: iterator ITB = vtrb.zaczynać();
ITB ++; ITB ++;
wektor:: iterator Ite = vtrb.koniec();
Ite--; Ite--; Ite--;
wektor vtra = „a”, „b”, „c”, „d”, „e”;
wektor:: iterator ITR = swap_ranges (ITB, ITE, vtra.zaczynać());
dla (int i = 0; iCout << vtrB[i] << ";
Cout << endl;
Cout << *itR << endl;
dla (int i = 0; iCout << vtrA[i] << ";
Cout << endl;
powrót 0;

Wyjście to:

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

Zauważ, że cały wektor nie został zamieniony. Zamiast tego są to tylko pierwsze trzy wartości całego wektora, który został zamieniony, z trzecim, czwartym i piątym wartościami VTRB. Szósty element VTRB nie był zaangażowany i oczekiwano.

VTRA ma 5 elementów, a VTRB ma 8 elementów. Aby naprawdę zamienić cały wektor, VTRA 5 elementów, sekwencja w VTRB, musi mieć 6 elementów (przy czym szósty element jest tylko ogranicznikiem). Poniższy program ilustruje to:

#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

wektor vtrb = „f”, „g”, „h”, „i”, „j”, „k”, „l”, „m”;
wektor:: iterator ITB = vtrb.zaczynać();
ITB ++; ITB ++;
wektor:: iterator Ite = vtrb.koniec();
Ite--;
wektor vtra = „a”, „b”, „c”, „d”, „e”;
wektor:: iterator ITR = swap_ranges (ITB, ITE, vtra.zaczynać());
dla (int i = 0; iCout << vtrB[i] << ";
Cout << endl;
Cout << *itR << endl;
dla (int i = 0; iCout << vtrA[i] << ";
Cout << endl;
powrót 0;

Wyjście to:

F g a b c d e m
H I J K L

Tym razem wszystkie 5 wartości VTRA zostało zamienionych na trzecie, czwarte, piąte, szóste i siódme wartości VTRB. Tak więc, aby naprawdę zamienić cały wektor, dłuższy wektor powinien mieć odpowiednią liczbę elementów (w sekwencji).

Wniosek

Wymiana dwóch wektorów oznacza wymianę zawartości jednego wektora z inną. Aby wektory zostały zamienione, muszą być tego samego typu. C ++ ma do tego funkcję członka. Oznacza to, że funkcja członka jednego wektora () bierze drugi wektor jako argument, a następnie wymienia zawartość. Jeśli programista chce więcej funkcji zamiany, takich jak zamiana iteratorów lub zamiana zakresu w jednym wektorze z całkowitą listą innego wektora, musi użyć biblioteki algorytm.