Wpis z mikrobloga

@yungdupa: jeżeli operujesz na indeksach, a nie na iteratorach, czy na pointerach/referencjach, to tego możesz używać w pełni naturalnie.

Dostęp po indeksie, bez tymczasowego chowania pointera do zmiennej w międzyczas zmiany składu kontenera, zawsze będzie dobrze działać, bo zawsze będziesz wyciągać aktualny pointer/referencję, o ile nie próbujesz uzyskać dostępu poza ostatni element, lub do nieistniejącego elementu.

Jeżeli chcesz nabyć wyczucia jak działa std::vector, to warto wiedzieć, jak wyglądają koncepcje:
↘️ malloc/calloc, realloc, free,
↘️ .erease,
↘️ czym jest capacity,
↘️ resize vs. reserve: https://stackoverflow.com/a/7397849/12755962.

Patrząc na std::vector masz rozróżnione pojęcie (warstwy) na zarezerwowaną pamięć w systemie operacyjnym (capacity), a wysokopoziomowe zliczanie elementów jako wynik wszystkich operacji modyfikacji składu obiektów kontenera (size) za pomocą publicznego API (metod/funkcji) kontenera.

W momencie, gdy zmienia się rezerwacja w systemie operacyjnym, to istnieje szansa, że zmieni się też pointer/referencja obiektów, stąd też pojęcie inwalidacji referencji/pointera:
↘️ https://en.cppreference.com/w/cpp/container#Iterator_invalidation

Przy czym capacity jest zarządzane automatycznie przez bibliotekę STL i z capacity wiąże się operacja realloc, gdy zmienia się liczba składowych kontenera.