Wektor C ++ ma wiele funkcji członków. Dwa z nich są clear () i usuń (). jasne() „Usuwa” wszystkie elementy wektora. Erase () „usuwa” pojedynczy element lub zakres elementów. Istnieją dwa przeciążone warianty funkcji członka Erase () dla wektora.
Tytuł tego artykułu jest w rzeczywistości „funkcja członka wektorowego () w porównaniu z funkcją członka wektorowego () w C ++”. Jest to porównanie funkcji dwukrotno-członków. Zajmuje się, kiedy użyć, z którego, jak używać, a na których warunkach jest używane.
Aby użyć wektora w programie C ++, program powinien zacząć od:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
Treść artykułu
Wektor clear ()
Funkcja elementu Clear () „usuwa” wszystkie elementy wektora. Jego składnia to:
void clear ()
Zwraca pustkę. Poniższy program ilustruje jego użycie z wyrażeniem „VTR.jasne();":
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
wektorvtr = „p”, „q”, „r”, „s”, „t”, „u”;
dla (wektor:: iterator it = vtr.zaczynać(); To != vtr.koniec(); it ++)
Cout << *it << ";
Cout << endl;
vtr.jasne();
dla (wektor:: iterator it = vtr.zaczynać(); To != vtr.koniec(); it ++)
Cout << *it << ";
Cout << endl;
powrót 0;
Wyjście to jedna linia:
P q r s t u
Gdyby wektor nie został wyczyszczony, wyjście byłyby dwie linie tej samej sekwencji. Nie wykazano drugiej linii, ponieważ wszystkie elementy zostały oczyszczone.
const wektor i clear ()
Gdy deklaracja wektorowa jest poprzedzona stałą, oznacza to, że elementy wektora nie można usunąć ani zmienić. Jeśli wyrażenie próbuje zmienić lub usunąć którekolwiek z elementów, program nie skompiluje. Przetestuj następujący program i pamiętaj, że nie kompiluje:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
Conster wektorvtr = „p”, „q”, „r”, „s”, „t”, „u”;
dla (wektor:: const_iterator it = vtr.zaczynać(); To != vtr.koniec(); it ++)
Cout << *it << ";
Cout << endl;
vtr.jasne();
dla (wektor:: const_iterator it = vtr.zaczynać(); To != vtr.koniec(); it ++)
Cout << *it << ";
Cout << endl;
powrót 0;
Gdyby program został przetestowany, komunikat o błędzie zostałby wydany i nie byłoby żadnej kompilacji. Ponieważ wektor został zadeklarowany stał.
Notatka: clear () usuwa wszystkie elementy wektora. W rzeczywistości wyznacza wszystkie elementy jako usunięte, tak że inne kody mogą zajmować lokalizacje pamięci. Jeśli lokalizacja pamięci jakiegokolwiek elementu nie została jeszcze objęta przez inny kod, element może być nadal ponownie używany w imieniu tego samego wektora.
Wektor
Uproszczone składni dla dwóch funkcji członka () są:
A.usuń (q)
I
A.usuń (Q1, Q2)
gdzie A jest nazwą wektora.
Iterator Erase (pozycja Const_iterator)
To jest pełna składnia dla „A.usuń (q) ”. Zwraca iterator wskazujący na element, który był tuż za tym, który wymazano. Argument, Q jest iteratorem wskazującym na element do usuwania. Poniższy program ilustruje to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
wektorvtr = „p”, „q”, „r”, „s”, „t”, „u”;
wektor:: iterator iter = vtr.zaczynać();
++iter; ++ ITER;
wektor:: iterator it = vtr.usunąć (itera);
dla (int i = 0; i < vtr.size(); i++)
Cout << vtr[i] << ";
Cout << endl;
Cout << *it << endl;
powrót 0;
Wyjście to:
P q s t u
S
„R” został usunięty. Zwracany iterator wskazuje teraz na „s”, który był tuż po „r”. Funkcja członka, początek (), zwraca iterator, który wskazuje na pierwszy element wektora. W kodzie ten iterator został zwiększony dwa razy, aby wskazać „R”. „R” został usunięty z wyrażenia ”, VTR.usunąć (itera) ”.
Zakres w wektorze
Dla listy,
„P”, „q”, „r”, „s”, „t”, „u”
sekwencja, „q”, „r”, „s”, „t” to zakres. Jednak w przypadku pojemników C ++ ostatni element „T” nie jest uważany za część zakresu. Jest to wskazane ogólnie jako:
[I, J)
Lub
[Q1, Q2)
„[” W tym przypadku oznacza, że pierwszy element w sekwencji jest uwzględniony i ”)” oznacza, że ostatni element nie jest uwzględniony.
Iterator Erase (Const_iterator pierwszy, Const_iterator Last)
To jest pełna składnia dla „A.usuń (Q1, Q2) ”. Zwraca iterator wskazujący na element, który był tuż za usuniętym zasięgiem. Uwaga: ostatni element w zakresie nie jest usuwany. Zatem zwrócony iterator wskazuje na ostatni element zakresu. Argumenty Q1 i Q2 są iteratorami wskazującymi na pierwsze i ostatnie elementy zakresu. Poniższy program ilustruje to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
wektorvtr = „p”, „q”, „r”, „s”, „t”, „u”;
wektor:: iterator ITB = vtr.zaczynać();
++Itb;
wektor:: iterator Ite = vtr.koniec();
--Ite; --te;
wektor:: iterator it = vtr.usunąć (ITB, ITE);
dla (int i = 0; i < vtr.size(); i++)
Cout << vtr[i] << ";
Cout << endl;
Cout << *it << endl;
powrót 0;
Wyjście to:
P t u
T
„Q”, „r”, „s” zostały usunięte. Zwracany iterator wskazuje teraz na „T”, który był ostatnim elementem w zakresie kontenera. Funkcja członka, end (), zwraca iterator, który wskazuje tuż po ostatnim elemencie wektora. W kodzie iterator ten został zmniejszony dwa razy, aby wskazać „T”, ostatni element zakresu. „Q”, „R”, „S” zostały usunięte bez ostatniego elementu, „t” w zakresie z wyrażeniem „VTR.usuń (ITB, ITE) ”.
const wektor i kasowanie ()
Jeśli deklaracja wektora jest poprzedzona stałą, dla stałej, to żadne z jego elementów nie można wymazać. Poniższy program nie zostanie skompilowany, wydając komunikat o błędzie dla a.Erase (Q) Wyrażenie:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
const wektorvtr = „p”, „q”, „r”, „s”, „t”, „u”;
wektor:: const_iterator iter = vtr.zaczynać();
++iter; ++ ITER;
wektor:: const_iterator it = vtr.usunąć (itera);
dla (int i = 0; i < vtr.size(); i++)
Cout << vtr[i] << ";
Cout << endl;
Cout << *it << endl;
powrót 0;
Gdyby czytelnik wypróbował program, otrzymałby komunikat o błędzie. Program nie byłby skompilowany.
Poniższy program nie zostanie skompilowany, wydając komunikat o błędzie dla a.Erase (Q1, Q2) Wyrażenie:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
Conster wektorvtr = „p”, „q”, „r”, „s”, „t”, „u”;
wektor:: const_iterator ITB = vtr.zaczynać();
++Itb;
wektor:: const_iterator Ite = vtr.koniec();
--Ite; --te;
wektor:: const_iterator it = vtr.usunąć (ITB, ITE);
dla (int i = 0; i < vtr.size(); i++)
Cout << vtr[i] << ";
Cout << endl;
Cout << *it << endl;
powrót 0;
Uwaga: Erase () usuwa element lub zakres elementów. W rzeczywistości wyznacza element, który jest usunięty, tak że ich lokalizacje pamięci mogą być pobierane przez inne kody. Jeśli lokalizacja pamięci jakiegokolwiek elementu nie została jeszcze objęta przez inny kod, element może być nadal ponownie używany w imieniu tego samego wektora.
pop_back ()
Funkcja członka pop_back () jest rodzajem funkcji Erase (). Jednak usuwa tylko ostatni element wektora. Składnia to:
void pop_back ()
Nie wymaga żadnej argumentu i zwraca nieważne. Poniższy program ilustruje jego użycie:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
wektorvtr = „p”, „q”, „r”, „s”, „t”, „u”;
vtr.pop_back ();
dla (int i = 0; i < vtr.size(); i++)
Cout << vtr[i] << ";
Cout << endl;
powrót 0;
Wyjście to:
P Q R S T
Ostatni element „U” został usunięty (wymazany).
Niszczenie wektora
Czy wektor może zostać zniszczony? - Tak! Jednak po zniszczeniu wektora wszystkie jego elementy są wymazane oprócz nazwy; co oznacza, że deklaracja wektorowa może być nadal ponownie wykorzystywana, ale z pewną niepewnością. Składnia do zniszczenia wektora to:
A.~ X ()
gdzie „A” to nazwa wektora. Poniższy program ilustruje to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
wektorvtr = „p”, „q”, „r”, „s”, „t”, „u”;
vtr.~ wektor ();
vtr = „v”, „w”, „x”, „y”, 'z';
dla (int i = 0; i < vtr.size(); i++)
Cout << vtr[i] << ";
Cout << endl;
vtr.~ wektor ();
vtr.push_back („a”);
vtr.push_back („b”);
vtr.push_back („c”);
vtr.push_back („d”);
vtr.push_back („e”);
dla (int i = 0; i < vtr.size(); i++)
Cout << vtr[i] << ";
Cout << endl;
powrót 0;
Wyjście to:
V W x y z
p ^ t e @ a c d e
z komputera autora, z niektórymi nierzetelnymi znakami dla drugiej linii.
Wniosek
Funkcja elementu wektorowego Clear () można porównać z funkcją elementu wektora Erase (). Nie są substytutami. clear () usuwa wszystkie elementy wektora. W rzeczywistości wyznacza wszystkie elementy jako usunięte, tak że ich lokalizacje pamięci mogą być pobierane przez inne kody. Jeśli lokalizacja pamięci jakiegokolwiek elementu nie została jeszcze objęta przez inny kod, element może być nadal ponownie używany w imieniu tego samego wektora. Erase () usuwa element lub zakres elementów. W rzeczywistości wyróżnia element, który jest usuwany, tak że lokalizację pamięci może być pobrana przez inny kod. Jeśli lokalizacja pamięci jakiegokolwiek usuniętego elementu nie została jeszcze objęta przez inny kod, element może być nadal ponownie używany w imieniu tego samego wektora. Clear ma podobieństwo do niszczenia, ~ x ().