De ce contează?
Gândește-te la catalogul clasei. Fiecare rând este un elev și are aceleași rubrici: nume, notă la mate, notă la română, medie. Catalogul nu e o singură listă de nume și o altă listă de medii ținute separat — e o listă de rânduri, iar fiecare rând ține laolaltă tot ce știi despre acel elev. Un vector de structuri este exact catalogul: un șir de rânduri identice ca formă, dar diferite ca date.
Ce este
Știi deja două lucruri separat:
- un vector ține mai multe valori de același fel, numerotate prin index (
v[0],v[1], …); - o structură (
struct) ține mai multe câmpuri diferite despre o singură entitate (nume, medie, vârstă).
Un vector de structuri le combină: fiecare element al vectorului nu mai e un singur număr, ci o structură întreagă. Dacă declari Elev v[100];, atunci v este o listă de 100 de elevi, iar fiecare v[i] este un elev complet, cu toate rubricile lui.
Asta îți rezolvă o problemă reală. Dacă ai vrea să ții 100 de elevi cu trei vectori paraleli — nume[100], mate[100], romana[100] — ai fi obligat să le ții manual sincronizate: dacă muți elevul de pe poziția 3 pe poziția 7, trebuie să muți în trei locuri deodată, și e foarte ușor să greșești. Cu un vector de structuri, elevul de pe poziția i e o singură valoare: muți v[i], se mută tot despre el odată.
Reține distincția care contează cel mai mult:
v[i]este o structură întreagă — tot elevul de pe pozițiai, cu toate câmpurile lui.v[i].campeste un singur câmp din acea structură — de exemplu notav[i].mediesau numelev[i].nume.
Se citesc de la stânga la dreapta, în doi pași: indexarea ([i]) îți alege care entitate, iar punctul (.camp) îți alege care rubrică din ea. Mai întâi pui degetul pe rândul din catalog, apoi cobori pe o coloană anume. Fără punct te-ai oprit la rând întreg; cu punct ai ajuns la o singură căsuță.