vector::erase jak działa

0

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 ?

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)

1 użytkowników online, w tym zalogowanych: 0, gości: 1