Mam jedno proste pytanie. Czy vector::erase() działa na zasadzie, że jest przygotowana nowo alokowana tablica a następnie zostają do niej przypisane elementy pierwszego vectora oprócz usuwanego indeksu ? Czy może w inny sposób ?
0
2
Specyfikacja mówi, że wszystkie elementy wektora w pamięci są ułożone liniowo, więc tak (inaczej nie dałoby się tego założenia spełnić). Wyjątkiem jest usunięcie ostatniego elementu, które musi odbyć się w czasie stałym. W praktyce wystarczy wtedy zmniejszenie wielkości wektora o 1 i sprawienie, że end()
będzie wskazywał na ostatni nieusunięty element.
edit: tak jak pisze Endju, alokacja nowej tablicy konieczna nie jest, ale przesunięcia elementów się nie uniknie.
2
@Rev ma rację, ale nie trzeba alokować nowej tablicy. Usuwa się jeden element i wszystkie po nim przesuwa. (23.3.6.5 punkt 4)