Tablouri (vectori) în C++
Ghid clar despre tablouri și vectori în C++. Cum stochezi mai multe valori, le parcurgi cu bucle și folosești std::vector pentru date care cresc dinamic.
Imaginează-ți că vrei să ții notele a 30 de elevi. Ai declara 30 de variabile: nota1, nota2, ... nota30? Nici vorbă. Pentru asta există tablourile — o singură structură care ține multe valori de același tip, accesibile printr-un index. Hai să le înțelegem.
Tabloul clasic (array)
#include <iostream>
int main() {
int note[5] = {8, 10, 7, 9, 6};
std::cout << "Prima nota: " << note[0] << std::endl;
std::cout << "A treia nota: " << note[2] << std::endl;
return 0;
}
Atenție la un detaliu fundamental: indexarea începe de la 0. Primul element e note[0], al cincilea e note[4]. E sursa multor erori la început, dar te obișnuiești repede.
Parcurgerea cu o buclă
Aici se vede magia: combinăm tabloul cu o buclă for și prelucrăm toate valorile cu același cod:
#include <iostream>
int main() {
int note[5] = {8, 10, 7, 9, 6};
int suma = 0;
for (int i = 0; i < 5; i++) {
suma += note[i];
}
double medie = (double)suma / 5;
std::cout << "Media: " << medie << std::endl;
return 0;
}
Observă (double)suma: forțăm împărțirea cu zecimale. Fără ea, suma / 5 ar fi împărțire întreagă și ai pierde partea fracționară.
std::vector: tabloul care crește
Tablourile clasice au o dimensiune fixă. Dacă nu știi dinainte câte valori vei avea, folosești std::vector — un tablou care se redimensionează singur:
#include <iostream>
#include <vector>
int main() {
std::vector<int> numere;
numere.push_back(10); // adauga la final
numere.push_back(20);
numere.push_back(30);
std::cout << "Am " << numere.size() << " elemente." << std::endl;
for (int i = 0; i < numere.size(); i++) {
std::cout << numere[i] << " ";
}
std::cout << std::endl;
return 0;
}
Metode esențiale pentru vector:
| Metodă | Ce face |
|---|---|
push_back(x) | adaugă x la final |
size() | câte elemente are |
v[i] | accesează elementul de pe poziția i |
pop_back() | scoate ultimul element |
empty() | true dacă e gol |
Parcurgere modernă cu range-based for
Când vrei doar valorile, fără indici, ai o sintaxă mai curată:
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {3, 1, 4, 1, 5};
int maxim = v[0];
for (int x : v) {
if (x > maxim) maxim = x;
}
std::cout << "Maximul este: " << maxim << std::endl;
return 0;
}
for (int x : v) se citește "pentru fiecare x din v". Elegant și greu de greșit.
Capcana cea mai periculoasă: accesarea unui index în afara limitelor, de exemplu
v[100]într-un vector cu 5 elemente. C++ nu te oprește — pur și simplu citește memorie care nu-ți aparține, iar rezultatele sunt impredictibile. Verifică mereu limitele.
Mică provocare
Citește 10 numere într-un vector și afișează câte sunt pare și câte impare. Ai nevoie de doi contori și de operatorul % 2. E exact genul de exercițiu care îți consolidează totul: citire, stocare, parcurgere, decizie.
De ce contează vectorii
Aproape orice problemă serioasă lucrează cu colecții de date: liste de scoruri, coordonate, cuvinte. Tablourile și vectorii sunt fundația peste care se construiesc sortări, căutări și structuri de date mai avansate.
La ByteSchool te ducem dincolo de sintaxă: înveți să alegi structura potrivită pentru fiecare problemă, ghidat de mentori din Big Tech care fac asta zi de zi. Pas cu pas, ajungi să gândești în termeni de date și algoritmi. Vino să exersăm împreună.