De ce contează?
Un buletin de identitate strânge la un loc date diferite despre o persoană: nume, data
nașterii, adresă. Nu le ții pe foi separate — sunt un singur document. Un struct face
exact asta în program: grupează date legate sub o singură „etichetă".
Ce este un struct
Un struct definește un tip nou care grupează mai multe câmpuri, posibil de tipuri diferite. În loc de trei variabile paralele, ai o singură entitate cu sens.
struct Elev {
char nume[30];
int varsta;
double nota;
}; // ATENTIE: punct-si-virgula obligatoriu aiciDefiniția se termină cu };. Punct-și-virgula după acolada de închidere e ușor de uitat
și produce erori de compilare care arată ciudat (adesea raportate pe linia următoare).
Folosirea: operatorul punct
Accesezi un câmp cu .:
#include <iostream>
using namespace std;
struct Punct {
int x;
int y;
};
int main() {
Punct p;
p.x = 3; // setam campul x
p.y = 5; // setam campul y
cout << "Distanta de la origine la patrat: "
<< p.x * p.x + p.y * p.y << "\n"; // 34
return 0;
}Pentru p = (3, 5), afișează 34 (= 9 + 25).
Inițializare rapidă
Poți seta toate câmpurile deodată, în ordine:
Punct p = {3, 5}; // x = 3, y = 5
Elev e = {"Ana", 15, 9.5};Gruparea în struct nu e doar comoditate: face codul mai clar și pregătește terenul pentru vectori de structuri (mai mulți elevi) și sortarea lor după un câmp — temele următoare.
De ce nu trei variabile separate
Cu variabile paralele (nume[], varsta, nota), când vrei „al doilea elev" trebuie să
sincronizezi trei vectori. Cu un struct, un elev e o valoare — îl copiezi, îl trimiți
la o funcție, îl pui într-un vector ca pe un întreg.
Complexitate
Accesul la un câmp e O(1) — direct, fără căutare. Structul nu adaugă cost de execuție; e o organizare a datelor.
Capcane reale la struct:
- Uiți
;după}: definiția structului se termină cu};. Lipsa lui dă erori derutante. - Confuzi
.cu->: pentru o variabilă foloseștip.x;->e doar pentru pointeri la struct. - Câmpuri neinițializate: ca la orice variabilă, un câmp necitit conține gunoi. Inițializează înainte de folosire.
- Copii nedorite: atribuirea
a = bcopiază toate câmpurile. E corect, dar la structuri mari poate fi costisitor — la nevoie transmiți prin referință.
De reținut
structgrupează câmpuri legate (posibil de tipuri diferite) într-un tip nou.- Definiția se termină cu
};; accesezi câmpurile cu.(ex.elev.nota). - Acces O(1); pregătește vectorii de structuri și sortarea după câmp.