Czy możesz zrobić wektor wektorów w C++?

Czy możesz zrobić wektor wektorów w C++?
Tak! Tak, możesz zrobić wektor wektorów w C++. Normalny wektor to jednowymiarowa struktura danych listy. Wektor wektorów to dwuwymiarowa struktura danych listy, z dwóch normalnych wektorów. Dwuwymiarowa lista to tabela bez odpowiedniego wiersza nagłówka i bez odpowiedniej kolumny nagłówka. Wektor wektorów to jeden wektor gniazdujący inne wektory. Argument szablonu dla wektora zewnętrznego jest wektorem. I tak, wektor wektorów może być tylko jednego rodzaju, e.G., wszystkie liczby całkowite lub wszystkie znaki.

W tym artykule wyjaśniono, jak utworzyć wektor wektorów i jak zastosować oczywiste funkcje członkowskie wektora, do wektora wektorów. Aby to zrobić, program C ++ powinien zacząć od:

#włączać
#włączać
za pomocą przestrzeni nazw Std;

Zwróć uwagę na włączenie biblioteki wektorowej.

Treść artykułu

  • Budowa
  • Dostęp z indeksami
  • Dostęp do sekwencji
  • Wkładanie wiersza
  • Dołączenie wiersza
  • Wymazanie wierszy
  • Jasne
  • Wniosek

Budowa

Konstrukcja normalnego wektora zaczyna się od:

wektor nazwa

Nazwa to nazwa wektora. Poniższy kod tworzy jednowymiarowy wektor z wyposażoną listą inicjalizacyjną 5 znaków:

wektor vtr = „a”, „b”, „c”, „d”, „e”;

Aby skonstruować wektor wektorów, zacznij od:

wektor> Nazwa

Zwróć uwagę, jak szablon wektora stał się kolejnym argumentem szablonu. Tak więc należy go interpretować jako wektor wektorów tego samego typu. Nazwa to nazwa wektora wektorów. Poniższy kod tworzy dwuwymiarowy wektor z 6 hodowanymi listami inicjalizacji po 5 znaków dla 6 wierszy.

wektor> vtr = 'a', 'b', 'c', 'd', 'e',
„A”, „B”, „C”, „D”, „E”,
„A”, „B”, „C”, „D”, „E”,
„A”, „B”, „C”, „D”, „E”,
„A”, „B”, „C”, „D”, „E”,
„A”, „B”, „C”, „D”, „e”;

Osterowy wektor literał, ma ograniczenia, i. Każdy wektor dla wiersza ma ograniczenia, i. Literały wektorowe rzędu są oddzielone przecinkami. Ending Semicolon znajduje się na prawym dolnym końcu stolika tworzenia. Wektor 2D mógł być również stworzony w następujący sposób:

wektor onedv = „a”, „b”, „c”, „d”, „e”;
wektor> twodv = onedv, onedv, onedv, onEdv, onedv, onedv;

Oznacza to, że utworzony jest wektor 1D, a jego zmienna nazwa jest używana jako identyfikatory dla różnych wierszy.

Teraz wiersze mogą mieć inną zawartość. W takim przypadku każdy wiersz będzie inny wektor o innej nazwie.

Dostęp z indeksami

Składnia dostępu do elementu to:

2DVECTORName [i] [j]

Gdzie i jest zmienną dla określonego wiersza, a J jest zmienną dla określonej kolumny. Liczenie wierszy zaczyna się od zera, a liczenie kolumn również zaczyna się od zera. Dwuwymiarowy wektor wektorów nie musi być regularny; to znaczy liczba kolumn dla każdego wiersza nie musi być taka sama. Poniższy kod odczytuje wartość wiersza 2 (trzeci wiersz) i indeksu kolumna 3 (czwarta kolumna):

wektor> vtr = 'a', 'b', 'c', 'd', 'e',
„A”, „B”, „C”, „D”, „E”,
„A”, „B”, „C”, „D”, „E”,
„A”, „B”, „C”, „D”, „E”,
„A”, „B”, „C”, „D”, „E”,
„A”, „B”, „C”, „D”, „e”;
char ch = vtr [2] [3];
Cout << ch << endl;

Wyjście to „D”.

Można to zmienić i odczytać ponownie w ten sam sposób, z następującym segmentem kodu:

vtr [2] [3] = „z”;
char ch = vtr [2] [3];
Cout << ch << endl;

W takim przypadku wyjście to „z”.

Dostęp do sekwencji

Do pierwszego wiersza można uzyskać od pierwszego elementu, a następnie drugi element, a następnie trzeci element, aż do ostatniego elementu pierwszego rzędu. Następnie do następnego wiersza można uzyskać w ten sam sposób, a następnie jeden po, a następnie ten następujący, aż do zakończenia ostatniego wiersza. Potrzebuje to dwóch pętli, jak ilustruje następujący kod:

vectoronedv = „a”, „b”, „c”, „d”, „e”;
wektortwodv = onedv, onedv, onedv, onedv, onEdv, onedv;
dla (int i = 0; ifor (int j = 0; jCout<
Cout<
Cout<Wyjście to:

A B C D E
A B C D E
A B C D E
A B C D E
A B C D E
A B C D E

Zwróć uwagę, że TwODV.rozmiar () podaje liczbę wierszy dla całej tabeli, podczas gdy TwODV [i].rozmiar () podaje liczbę komórek (kolumny) dla określonego rzędu.

Wkładanie wiersza

Wkładanie z przodu

Rząd jest do wektora 2D, ponieważ komórka jest do wektora 1D. Stosuje się to samo podejście do wstawiania, ale zamiast literału komórkowego stosuje się literał rzędu; zamiast identyfikatora wartości, identyfikator wiersza (e.G., używany jest twodv [i]). Poniższy kod pokazuje, w jaki sposób wiersz jest wstawiany przed wektorem 2D:

wektortwodv = „a”, „b”, „c”, „d”, „e”,
„A”, „B”, „C”, „D”, „E”,
„A”, „B”, „C”, „D”, „E”,
„A”, „B”, „C”, „D”, „e”;
wektor:: iterator p = twodv.zaczynać();
vectoroneDV = '*', '$', '%', '$', '&';
Twodv.wstaw (P, onedv);
dla (int i = 0; ifor (int j = 0; jCout<
Cout<
Cout<Wyjście to:

* $ % $ &
A B C D E
A B C D E
A B C D E
A B C D E

Funkcja członka stear () zwraca iterator, który wskazuje do pierwszego wiersza wektora 2D. Zauważ, że zwrócony iterator musi być typu wektora wektorów (e.G. wektor:: Iterator P). Wstawienie odbywa się przed tym, gdzie wskazuje iterator.

Wkładanie wewnątrz

Poniższy kod wkłada wiersz w tabeli, przed spiczastym trzecim rządem:

wektortwodv = „a”, „b”, „c”, „d”, „e”,
„A”, „B”, „C”, „D”, „E”,
„A”, „B”, „C”, „D”, „E”,
„A”, „B”, „C”, „D”, „e”;
wektor:: iterator p = twodv.zaczynać();
P ++; P ++;
vectoroneDV = '*', '$', '%', '$', '&';
Twodv.wstaw (P, onedv);
dla (int i = 0; ifor (int j = 0; jCout<
Cout<
Cout<Wyjście to:

A B C D E
A B C D E
* $ % $ &
A B C D E
A B C D E

Iterator podwyższono dwukrotnie, aby wskazać trzeci rząd przed wstawieniem. Oświadczenie o wstawianiu mogło być tak samo napisane jako,

Twodv.insert (p, '*', '$', '%', '$', '&');

Wynik byłby taki sam.

Dołączenie wiersza

Rząd można dołączyć za pomocą funkcji jednowymiarowej push_back (). Poniższy kod to ilustruje:

wektortwodv = „a”, „b”, „c”, „d”, „e”,
„A”, „B”, „C”, „D”, „E”,
„A”, „B”, „C”, „D”, „E”,
„A”, „B”, „C”, „D”, „e”;
vectoroneDV = '*', '$', '%', '$', '&';
Twodv.push_back (onEdv);
dla (int i = 0; ifor (int j = 0; jCout<
Cout<
Cout<Wyjście to:

A B C D E
A B C D E
A B C D E
A B C D E
* $ % $ &

Instrukcja push_back () może być tak samo napisana jako,

Twodv.push_back ('*', '$', '%', '$', '&');

Wynik byłby taki sam.

Wymazanie wierszy

Poniższy kod wykorzystuje funkcję członka wektora jednowymiarowego () Erase () wektor, aby usunąć drugie i trzecie rzędy, chociaż drugi iterator wskazuje na czwarty rząd, 5-wierszu wektora wektorów:

wektortwodv = „a”, „b”, „c”, „d”, „e”,
„A”, „B”, „C”, „D”, „E”,
„A”, „B”, „C”, „D”, „E”,
„A”, „B”, „C”, „D”, „E”,
„A”, „B”, „C”, „D”, „e”;
wektor:: iterator p = twodv.zaczynać();
P ++;
wektor:: iterator q = twodv.koniec();
Q--; Q--;
Twodv.usunąć (p, q);
dla (int i = 0; ifor (int j = 0; jCout<
Cout<
Cout<Wyjście to:

A B C D E
A B C D E
A B C D E

One-wymiarowa funkcja elementu End () zwraca iterator, który wskazuje tuż po zakończeniu jednowymiarowego wektora (który jest obecnie wektorem wektorów). Jest dwukrotnie zmniejszany w powyższym kodzie, aby wskazać rzęd. Ilekroć należy wymazać zakres elementów lub wierszy, element lub rząd wskazane przez drugi iterator nie jest wymazany.

Jasne

Element jest wektorem jednowymiarowym, ponieważ rząd jest do dwuwymiarowego wektora (wektor wektorów). Wszystkie rzędy wektora można usunąć za pomocą jednowymiarowej funkcji elementu Clear (). Poniższy kod to ilustruje:

wektortwodv = „a”, „b”, „c”, „d”, „e”,
„A”, „B”, „C”, „D”, „E”,
„A”, „B”, „C”, „D”, „E”,
„A”, „B”, „C”, „D”, „E”,
„A”, „B”, „C”, „D”, „e”;
Twodv.jasne();
dla (int i = 0; ifor (int j = 0; jCout<
Cout<
Cout<Wyjście to nic.

Wniosek

Element jest do jednowymiarowego wektora, ponieważ rząd jest do dwuwymiarowego wektora (wektor lub wektory). Wszystkie jednowymiarowe funkcje członka dla jednowymiarowego wektora, mogą być używane do wektora dwuwymiarowego, zwracając się do wierszy zamiast elementów. Do poszczególnych komórek tabeli można uzyskać za pomocą twodv [i] [j], gdzie TwODV, I i J mają swoje wspólne znaczenie. Wektor wierszy można rozwiązać za pomocą TwODV, a każdy wiersz można rozwiązać za pomocą TwODV [i].