Egzamin zawodowyPortal części pisemnej

INF.04 · pytanie 378

Jakie będą skutki wykonania podanego fragmentu kodu w języku C++? vector <int> liczby; for(int i=0; i<10; i++) { liczby.push_back(2*i); }

  1. AZ tablicy liczby usuwane są elementy, z każdym obiegiem pętli eliminowany jest element z jej końca.
  2. BZ tablicy liczby usuwane są elementy, z każdym obiegiem pętli eliminowany jest element z jej początku.
  3. CDo tablicy liczby, na jej końcu, dodawane są nowe wartości.Poprawna
  4. DDo tablicy liczby, na jej początku, dodawane są nowe wartości.

Wyjaśnienie

Kod, który został przedstawiony, pokazuje bardzo typowe zastosowanie kontenera std::vector w C++. Metoda push_back() dodaje nowy element zawsze na końcu wektora, co oznacza, że kolejne wywołania tej funkcji będą rozszerzać tablicę o nowe wartości w porządku dodawania. W tym konkretnym przykładzie do pustego wektora liczby, w każdej iteracji pętli for dodawana jest liczba będąca podwojeniem indeksu – czyli 0, 2, 4, 6, 8, aż do 18 włącznie (bo i przyjmuje wartości od 0 do 9). To bardzo przyjazny i intuicyjny sposób na dynamiczne rozbudowywanie zbioru danych bez konieczności martwienia się o ręczne zarządzanie rozmiarem tablicy, co w języku C++ jest częstym źródłem błędów w przypadku zwykłych tablic. Z mojego doświadczenia korzystanie z push_back() jest czymś absolutnie podstawowym w codziennej pracy programisty, zwłaszcza jeśli chodzi o szybkie prototypowanie czy operacje na listach wynikowych. Warto zwrócić uwagę, że vector zapewnia też wydajne zarządzanie pamięcią - automatycznie rezerwuje przestrzeń, a w razie potrzeby powiększa ją. Standard C++ promuje stosowanie kontenerów STL właśnie z uwagi na bezpieczeństwo i wygodę użytkowania, więc to rozwiązanie jest nie tylko poprawne, ale też zgodne z dobrymi praktykami. Często w praktyce spotyka się właśnie takie sekwencyjne dodawanie elementów do końca wektora, chociażby przy wczytywaniu danych z plików czy budowaniu dynamicznych struktur.