Jak rozszerzyć wektor w C++?

Jak rozszerzyć wektor w C++?
Jeśli „rozszerzenie” tutaj oznacza, że ​​więcej elementów w wektor. Jednak „rozszerzenie wektora” nie jest klasyczną frazą w C++. W rzeczywistości „Rozwiń” w C ++ faktycznie oznacza, zastąp nazwę obiektu na wartości jego treści.Jeśli wektor składa się z literałów strunowych, wektor można zastąpić jednym sznurkiem złożonym z literałów sznurkowych. Należy to jednak zrobić ręcznie. To znaczy, musi to zrobić programista, a nie biblioteka.

Niezależnie od tego, ten post wyjaśni, jak zastąpić wektor literałów smyczkowych, jednym ciągiem literałów. Ten post wyjaśni również różne sposoby zwiększania wektora C ++. Długość wektora w C ++ nazywa się rozmiarem.

Wektor ma funkcje członkowskie. Jego rozmiar można zwiększyć za pomocą funkcji członka: resize (), insert (), emplace () i push_back (). W tym artykule wyjaśniono różne sposoby rozszerzenia wektora, czyli zwiększonej wielkości; aw przypadku wektora literałów smyczkowych zastąpiony wszystkimi literałami smyczkowymi.

Czy kodowanie wektora w ciele funkcyjnym Main (), chyba że istnieje dobry powód, aby to zrobić przed korpusem funkcyjnym Main (). Nie zapomnij rozpocząć programu z:

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

Treść artykułu

  • Wektor ciągów, na jeden ciąg
  • Zwiększenie wielkości wektora
  • Rozmiar
  • Wkładanie
  • Emplace
  • Push_back
  • Znajomość długości wektora
  • Pojemność wektora
  • Przestrzeń rezerwowa dla wektora
  • Wniosek

Wektor ciągów do jednego ciągu

Wektor literałów smyczkowych można zastąpić jednym ciągiem literałów. Literały zostaną oddzielone przecinkami w jednym ciągu. Poniższy kod to ilustruje:

vectorVtr = „Toyota”, „Mitsubishi”, „Ford”, „Mercedes”, „Jeep”;
Charchars [100];
int ctr = 0; //lada
int i = 0;
dla (i = 0; iconst char* str = vtr [i];
int j = 0;
dla (j = 0; str [j] != '\ 0'; J ++)
archars [ctr] = str [j];
++Ctr;

archars [ctr] = ','; ++ ctr; archars [ctr] = ”;
++Ctr;

archars [ctr] = '\ 0';
Cout<Wyjście to:

Toyota, Mitsubishi, Ford, Mercedes, Jeep,

który jest jednym długim ciągiem. Ciąg macierzy i literał sznurka w podwójnych cytatach, są zasadniczo tym samym, kończącym się w „\ 0”; Chociaż zakończenie podwójnego cytatu literału jest domyślne. Ostatni jeden długi ciąg ma tylko jeden „\ 0” na końcu sekwencji znaków. Kod można nadal zmodyfikować, aby usunąć ostatni przecinek i przestrzeń.

Zwiększenie wielkości wektora

Rozmiar

Funkcję elementu size () może być użyta do zwrócenia rozmiaru () wektora, jak pokazuje następujący kod:

vectorvtr „f”, „g”, „h”, „i”, „j ';
Cout<Wyjście to 5.

void rozmiar (size_type sz)

Aby zwiększyć rozmiar wektora, wektor powinien być rozmiaru na większą liczbę. Poniższy kod robi to za pomocą funkcji członka, rozmiar (size_type Sz):

vectorvtr „f”, „g”, „h”, „i”, „j ';
vtr.rozmiar (7);
vtr [5] = „k”;
vtr [6] = „l”;
dla (int i = 0; iCout<
Cout<Wyjście to:

F g h i j k l

Gdy wektor jest właśnie zmieniony w funkcji członka resize (), nowe puste lokalizacje są udostępniane pod koniec wektora. Te nowe lokalizacje można następnie wypełnić.

void rozmiar (size_type sz, const t & c)

Tę samą wartość można dodać do nowych lokalizacji pod koniec wektora za pomocą przeciążonej metody resize (). Ilustracja:

vectorvtr „f”, „g”, „h”, „i”, „j ';
vtr.Zmień rozmiar (8, „Z”);
dla (int i = 0; iCout<
Cout<Wyjście to:

F g h i j z z z z

Wkładanie

Wstawienie odbywa się przed elementem wskazanym przez iterator.

wstaw (pozycja Const_iterator, const t & x)

Poniższy kod pokazuje, w jaki sposób używana jest ta funkcja:

vectorvtr „f”, „g”, „h”, „i”, „j ';
wektor :: iterator p = vtr.zaczynać();
P ++, P ++;
char id = 'z';
vtr.wstaw (P, id);
dla (int i = 0; iCout<
Cout<Wyjście to:

F g z h i j

„Z” został wstawiony przed H. Funkcja członka stear () zwraca iterator, który wskazuje na pierwszy element wektora. Iterator można następnie zwiększyć do pożądanej pozycji. Zauważ, że oczekiwany drugi argument za insert () tutaj jest identyfikatorem.

Iterator wstawka (pozycja Const_iterator, t && x)

Poniższy kod pokazuje, w jaki sposób używana jest ta funkcja:

vectorvtr „f”, „g”, „h”, „i”, „j ';
wektor :: iterator p = vtr.zaczynać();
P ++, P ++;
vtr.wstaw (P, „Z”);
dla (int i = 0; iCout<
Cout<Wyjście to:

F g z h i j

„Z” został wstawiony przed H. Funkcja członka stear () zwraca iterator, który wskazuje na pierwszy element wektora. Zauważ, że oczekiwany drugi argument za insert () tutaj jest dosłownym.

Iterator wstawka (pozycja Const_iterator, size_type N, const t & x)

Tę samą wartość można wstawić więcej niż raz. Poniższy kod to ilustruje:

vectorvtr „f”, „g”, „h”, „i”, „j ';
wektor :: iterator p = vtr.zaczynać();
P ++, P ++;
char id = 'z';
vtr.Wstaw (P, 3, ID);
dla (int i = 0; iCout<
Cout<Wyjście to:

F g z z h i j

Iterator Insert (pozycja Const_iterator, pierwsza inputiterator, Inputiterator Last)

Zakres od innego wektora można wstawić. Poniższy kod to ilustruje:

wektor ONTEVTR = „K”, „L”, „M”, „N”, „O”;
wektor :: iterator i = inthervtr.zaczynać();
i = i + 1;
wektor :: iterator j = intedvtr.koniec();
j = j - 2;
vectorvtr „f”, „g”, „h”, „i”, „j ';
wektor :: iterator p = vtr.zaczynać();
P ++, P ++;
vtr.Wstaw (P, I, J);
dla (int i = 0; iCout<
Cout<Wyjście to:

F g l m h i j

W przypadku drugiego wektora zakres jest uzyskiwany w następujący sposób: funkcja początkowa () Zwraca iterator, który wskazuje swój pierwszy element. Ten iterator, byłem przyrostowany, aby wskazać następny element. End () Funkcja członka zwraca iterator, który wskazuje tuż po ostatnim elemencie. Ten iterator J został dwukrotnie zmniejszony przez odejmowanie 2 od niego, a następnie wskazał na element „n”.

W tym momencie wyobrażony zasięg jest:

„L”, „M”, „n”

Jednak w przypadku C ++ ostatni element w zakresie nie będzie zaangażowany (wstawiony). Tak więc wstawiono tylko „„ L ”,„ M ”.

Iterator wstawka (pozycja Const_iterator, inicitizer_list IL)

Można włożyć literę wektorową. Poniższy kod to ilustruje:

vectorvtr „f”, „g”, „h”, „i”, „j ';
wektor :: iterator p = vtr.zaczynać();
P ++, P ++;
vtr.insert (p, „k”, „l”, „m”, „n”, 'o');
dla (int i = 0; iCout<
Cout<Wyjście to:

F g k l m n o h i j

Emplace

Zastosowanie emplace () jest podobne do użycia insert () i wielu programistów woli go do Insert ().

Emplace wewnątrz

Dla następującego kodu „Z” jest umieszczany w wartościach, „f”, „g”, „h”, „i”, „j”:

vectorvtr „f”, „g”, „h”, „i”, „j ';
wektor :: iterator p = vtr.zaczynać();
P ++, P ++;
vtr.emplace (p, „z”);
dla (int i = 0; iCout<
Cout<Wyjście to:

Emplace z przodu

Dla następującego kodu „Z” jest umieszczone przed wartościami, „f”, „g”, „h”, „i”, „j”:

vectorvtr „f”, „g”, „h”, „i”, „j ';
wektor :: iterator p = vtr.zaczynać();
vtr.emplace (p, „z”);
dla (int i = 0; iCout<
Cout<Iterator zwrócony przez początek () nie został zwiększony; I tak wyjście to:

Z F G H I J

Push_back

Do dołączenia elementu można użyć funkcji push_back (). Poniższy kod to ilustruje:

vectorvtr „f”, „g”, „h”, „i”, „j ';
vtr.push_back („z”);
dla (int i = 0; iCout<
Cout<Wyjście to:

F g h i j z

Element można również dołączyć za pomocą funkcji członka emplace_back (). Poniższy kod to ilustruje:

vectorvtr „f”, „g”, „h”, „i”, „j ';
vtr.emplace_back („z”);
dla (int i = 0; iCout<
Cout<Wyjście to:

F g h i j z

Znajomość długości wektora

Rozmiar wektora oznacza liczbę elementów w wektorze. Można to uzyskać za pomocą funkcji elementu size (). Poniższy program ilustruje to:

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

vectorVtr = „f”, „g”, „h”, „i”, „j”, „k”;
int sz = vtr.rozmiar();
Cout<powrót 0;

Wyjście to 6.

Pojemność wektora

Pojemności wektora nie należy mylić z wielkością wektora. Gdy wektor jest manipulowany i zwiększony, lokalizacje jego elementów w pamięci komputera są zmieniane (realokowane). Pojemność wektora to całkowita liczba elementów, które wektor może przechowywać bez konieczności realokacji. Opiera się na początkowym rozmiarze wektora. Poniższy program ilustruje to dla pustego wektora i wektora 5 elementów:

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

wektor vtr1;
wektor vtr2 „f”, „g”, „h”, „i”, „j ';
int cap1 = vtr1.pojemność();
int cap2 = vtr2.pojemność();
Cout<< cap1 <Cout<< cap2 <powrót 0;

Wyjście to:

0
5

Przestrzeń rezerwowa dla wektora

Void Reserve (size_type n)

Przestrzeń wektorowa może być zarezerwowana za pomocą tej funkcji. Poniższy program zastrzega przestrzeń 5 elementów:

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

vectorVtr = 'f', 'g', 'h';
vtr.rezerwę (5);
int cap = vtr.pojemność();
Cout<< "New Capacity: " << cap <vtr.push_back („i”);
vtr.push_back („j”);
vtr.push_back („k”);
dla (int i = 0; iCout<
Cout<powrót 0;

Wyjście to:

Nowa pojemność: 5
F g h i j k

Przestrzenie zastrzeżone obejmują te dla początkowych elementów. Fakt, że 5 przestrzeni zostało zarezerwowanych, nie oznacza, że ​​elementu nie można dołączyć ponad 5 elementów.

Wniosek

„Rozszerzenie wektora” nie jest klasyczną frazą w C++. Jeśli jednak „rozszerzenie wektora” oznacza, zwiększenie długości wektora, tak, tak, wektor można rozszerzyć. W C ++ długość wektora lub dowolnego pojemnika C ++ nazywa się rozmiarem. Wektor można rozszerzyć o następujące funkcje członka: ReSize (), insert (), emplace () i push_back (). Inne powiązane funkcje członków to: size (), pojemność () i rezerwowa (). W wielu programach C ++ wektor zostałby zwiększony i zmniejszony wiele razy. Wektor można zmniejszyć, używając funkcji wymierania - patrz później. Jeśli wektor składa się z literałów strunowych, wektor można zastąpić jednym długim ciągiem złożonym z literałów sznurkowych.