Aby usunąć określony element z wektora C ++, element musi zostać zidentyfikowany. Jeśli chodzi o funkcję elementu Erase (), element jest identyfikowany przez iterator. Następne pytanie brzmi: „Co to jest iterator?” - patrz poniżej. Ponieważ funkcja członka pop_back () usuwa ostatni element z definicji, konkretny element, który musi usunąć, został już zidentyfikowany pośrednio.
Aby użyć biblioteki wektorowej w C ++, program musi się rozpocząć:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
W tym artykule wyjaśniono, jak usunąć określony element z wektora C ++, zaczynając od wyjaśnienia głównego iteratora w C++. Cały kod wektorowy dla tego artykułu jest w ciele funkcyjnym Main ().
Treść artykułu
Identyfikacja elementu wektora
Identyfikacja przez odniesienie
Rozważ następujący wektor:
wektor vtr = „a”, „b”, „c”, „d”, „e”;
vtr [0] zwraca „a”. vtr [1] zwraca „b”. vtr [2] zwraca „c”. VTR [3] zwraca „D”. vtr [4] zwraca „e”. Jest to identyfikujące się przez odniesienie. Liczba w nawiasach kwadratowych nazywa się indeksem. Można to zrobić w pętli, jak pokazuje następujący program:
#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
wektor vtr = „a”, „b”, „c”, „d”, „e”;
dla (int i = 0; iCout << vtr[i] << ";
Cout << endl;
powrót 0;
Wyjście to:
A B C D E
Identyfikacja przez iterator
Rozważ następujący wektor:
wektor vtr = „a”, „b”, „c”, „d”, „e”;
it = vtr.początek (), oznacza „to” jest iteratorem wskazującym „a” .
to ++ wskazuje na „b”.
To ++ wskazuje na „c”, zwiększony po tym, jak wskazywał na „b”.
To ++ wskazuje na „d”, zwiększony po tym, jak wskazywał na „c”.
To ++ wskazuje na „e”, zwiększony po tym, jak wskazywał na „d”.
to ++ wskazuje na VTR.end (), który jest tuż poza ostatnim elementem, zwiększony po wskazywaniu „e”.
Można to zrobić w pętli, jak pokazuje następujący program:
#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
wektor vtr = „a”, „b”, „c”, „d”, „e”;
for (wektor :: iterator it = vtr.zaczynać(); To != vtr.koniec(); it ++)
Cout << *it << ";
Cout << endl;
powrót 0;
Wyjście to:
A B C D E
Pierwszy iterator został dostany z deklaracją:
wektor :: iterator it
gdzie „to” jest identyfikatorem iteratora.
Nadal odnosząc się do tego samego wektora,
it = vtr.end (), wskazuje tuż poza ostatnim elementem „e” .
wskazuje na „e”.
wskazuje na „d”, zmniejszony po tym, jak wskazywał na „e”.
wskazuje na „c”, zmniejszone po tym, jak wskazywało na „d”.
wskazuje na „b”, zmniejszone po tym, jak wskazywało na „c”.
wskazuje na „a”, zmniejszone po tym, jak wskazywało na „b”.
Ten schemat może być używany do wyświetlania wektora w odwrotnej kolejności, jak pokazuje następujący program:
#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
wektor vtr = „a”, „b”, „c”, „d”, „e”;
wektor :: iterator it = vtr.koniec();
dla (it = --t; it> = vtr.zaczynać(); To--)
Cout << *it << ";
Cout << endl;
powrót 0;
Wyjście to:
E d c b a
Początkowy iterator dla pętli jest zmniejszany. I.mi. „It = -it;”. Zwróć uwagę na to, że kwarta dla pętli, ja.mi. „It> = vtr.zaczynać();".
Aby uzyskać wartość wskazaną przez iterator, iterator musi być dereferencyjny przez operatora pośredniego *.
Usuwanie za pomocą Erase ()
Składnia do usuwania (usuwania) elementu z wektora jest:
A.usuń (q)
gdzie „A” jest nazwą wektora, a Q jest iteratorem wskazującym na element do usunięcia. To znaczy Q identyfikuje określony element do usunięcia. Funkcja członka zwraca iterator, który wskazuje na element tuż po usunięciu jednego.
Usuwanie z przodu
Funkcja wymierania może usunąć element z przodu wektora. Poniższy program ilustruje to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
wektor vtr = „a”, „b”, „c”, „d”, „e”;
wektor :: iterator q = vtr.zaczynać();
wektor :: iterator p = vtr.usunąć (q);
Cout << *p << endl;
dla (int i = 0; i < vtr.size(); i++)
Cout << vtr[i] << ";
Cout << endl;
for (wektor :: iterator it = vtr.zaczynać(); To != vtr.koniec(); it ++)
Cout << *it << ";
Cout << endl;
powrót 0;
Wyjście to:
B
B C D E
B C D E
Pierwsze dwa wiersze w programie obejmują dyrektywy, w tym niezbędne biblioteki. Następny wiersz deklaruje, że każda użyta nazwa pochodzi ze standardowej przestrzeni nazw.
W funkcji Main () pierwsze stwierdzenie deklaruje wektor. Oświadczenie po powrocie iteratora Q, które wskazuje na pierwszy element wektora. Poniższe stwierdzenie jest przedmiotem zainteresowania. Usuwa pierwszy element, na który wskazuje Q. Zwraca iterator, który wskazuje na element, który był tuż po usunięciu elementu. Instrukcja po wydrukowaniu wartości elementu iterator wskazuje po usunięciu. Następne dwa segmenty kodu wyświetlają pozostałe wartości w wektorze. Pierwszy z tych segmentów kodu używa referencji. Drugi używa iteratorów.
Usuwanie od wewnątrz
Aby usunąć element wartości, „c”, iterator zwrócił się, przez początek () musi być zwiększany dwa razy, aby wskazać element wartości, „c”. Funkcja elementu Erase () może następnie użyć iteratora do usunięcia elementu. Poniższy program ilustruje to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
wektor vtr = „a”, „b”, „c”, „d”, „e”;
wektor :: iterator q = vtr.zaczynać();
Q ++; Q ++;
wektor :: iterator p = vtr.usunąć (q);
Cout << *p << endl;
dla (int i = 0; i < vtr.size(); i++)
Cout << vtr[i] << ";
Cout << endl;
for (wektor :: iterator it = vtr.zaczynać(); To != vtr.koniec(); it ++)
Cout << *it << ";
Cout << endl;
powrót 0;
Wyjście to:
D
A b d e
A b d e
Usunięcie z tyłu za pomocą Erase ()
Aby usunąć element wartości, „e”, iterator zwrócony do końca () musi zostać raz zmniejszony, aby wskazać element wartości, „e”. Funkcja elementu Erase () może następnie użyć iteratora do usunięcia elementu. Poniższy program ilustruje to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
wektor vtr = „a”, „b”, „c”, „d”, „e”;
wektor :: iterator q = vtr.koniec();
Q--;
wektor :: iterator p = vtr.usunąć (q);
Cout << *p << endl;
dla (int i = 0; i < vtr.size(); i++)
Cout << vtr[i] << ";
Cout << endl;
for (wektor :: iterator it = vtr.zaczynać(); To != vtr.koniec(); it ++)
Cout << *it << ";
Cout << endl;
powrót 0;
Wyjście to:
mi
A B C D
A B C D
Jest tu niuans. Iterator zwrócony do końca () punktów do elementu, który powinien tam być, gdyby nie został usunięty.
Usuwanie za pomocą pop_back
Funkcja członka pop_back () z definicji usuwa ostatni element wektora. Więc programista nie musi identyfikować ostatniego elementu. Jego składnia jest
A.pop_back ()
gdzie „A” to nazwa wektora. Nie wymaga żadnego argumentu; Zwraca pustkę. Poniższy program usuwa ostatni element wektora:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
wektor vtr = „a”, „b”, „c”, „d”, „e”;
vtr.pop_back ();
dla (int i = 0; i < vtr.size(); i++)
Cout << vtr[i] << ";
Cout << endl;
for (wektor :: iterator it = vtr.zaczynać(); To != vtr.koniec(); it ++)
Cout << *it << ";
Cout << endl;
powrót 0;
Wyjście to:
A B C D
A B C D
Wniosek
Wektor C ++ ma wiele funkcji członków. Dwie z tych funkcji członków to Erase () i pop_back (). pop_back () usuwa ostatni element z wektora. Aby usunąć wszystkie elementy z wektora, używając pop_back (), funkcję pop_back () musi być powtórzona liczba przypadków elementów. Funkcja Erase () może usunąć element od początku, wewnątrz lub koniec wektora. Aby usunąć wszystkie elementy z wektora, przy użyciu usuwania (), funkcję Erase () musi być powtórzona liczba razy, gdy istnieją elementy, zaczynając od pierwszego elementu.
Aby usunąć określony element z wektora C ++, element musi zostać zidentyfikowany. Dla funkcji elementu Erase () element jest identyfikowany przez iterator. Ponieważ funkcja członka pop_back () usuwa ostatni element z definicji, konkretny element, który musi usunąć, został już zidentyfikowany pośrednio.