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!
