Łapka LogoŁapka Infa
🌐
Algorytmy

C++ (3/4): Tablice (Arrays/Vectors)

Poznaj statyczne sztywne tablice z lat 80. oraz nowoczesne wektory, ułatwiające operacje masowe na liczbach.

Tablice i Wektory w C++ (3/4)

Jeżeli wczytamy plik z tysiącem ułamków, musimy je jakoś zmagazynować (by np. obliczyć średnią arytmetyczną i zsumować odchylenie na maturze rozszerzonej).

C++ proponuje 2 ścieżki: Starą i twardą oraz Nową i nowoczesną. Uczymy się nowej, bo stara powoduje więcej awarii przed maturą niż to warte.

1. Stare Tablice (Archaiczne C-Style Arrays)

Większość szkolnych podręczników zacznie naukę od tego. Mają one kolosalną wadę (Pułapkę!): W C++ klasyczna tablica MUSI mieć z góry nałożony sztywny rozmiar wpisany w momencie pisania kodu.

int main() {
    // Ok, rezerwuję 1000 miejsc.
    int magazyn[1000];
    
    // Źle! Kompilator zażąda wpisania tuż przed "magazyn" stałej liczbowej!
    int ileChceWrzucic;
    cin >> ileChceWrzucic;
    int magazyn_blad[ileChceWrzucic]; // Błąd "Variable-sized object may not be initialized"
}

Na maturze plik raz może mieć 1000 linijek, raz 500, a raz 20 000. Sztywne tablice wymuszą na Tobie tworzenie bezsensownie olbrzymich bloków np. int zapas[1000000].

2. Genialne rozwiązanie C++ Standard: Wektor (std::vector) 🪤

Zamiast archaizmu, Standardowa Biblioteka udostępnia element zwany Wektorem. Działa on dokładnie tak jak sprytne, rozciągliwe listy w Pythonie z 3. lekcji. Kiedy dodajesz nową liczbę, on po cichu dogaduje się z Windows'em/Linuxem o rozciągnięcie pokoju w RAMie. Zawsze jest idealnie dopasowany.

Musisz u góry zainkludować #include <vector>.

#include <iostream>
#include <vector>
using namespace std;

int main() {
    // 1. Zaczynamy tworząc "zmienna-gąsienicę" z deklaracją czym będzie się żywić:
    vector<int> cyfry;
    
    // 2. Dodawanie elementów (Odpowiednik .append() z Pythona). Używamy push_back()
    cyfry.push_back(50);
    cyfry.push_back(100);
    cyfry.push_back(10);
    
    // 3. Sprawdzamy na żywo rozmiar!
    cout << "Moja tablica zajela: " << cyfry.size() << " miejsc w pamieci." << endl;
    
    // 4. Dostajemy się do wyników pętlą FOR
    for(int i = 0; i < cyfry.size(); i++) {
        cout << cyfry[i] << " ";
    }
    // Wywali na ekranie ładne 50 100 10
    
    return 0;
}

Wybierając Wektor, zdejmujesz z siebie stres, że zapisałeś 900 wierszy w tablicy mieszczącej na sztywno tylko 800. Pamiętaj ten mechanizm na maturze rozszerzonej!