Răspuns :
►De ce nu pot declara simplu un ciur de dimensiune enorma ?
Toate variabilele declarate in functii (inclusiv functia main) sunt salvate pe stiva in mod default. Toate compilatoarele au o limita la dimensiunea maxima a stivei. In Visual Studio limita este de 1MB (poti stoca un vector cu cu aproximativ 250000 de valori de tip int pana sa depasesti limita). In Code::Blocks limita e ceva mai maricica. Din acest motiv nu poti declara vectori de dimeniuni foarte mari in functii.
► Avem urmatoarele optiuni :
◘ Declaram ciurul ca variabila globala in afara functiei main (NERECOMANDAT)
exemplu :
[tex]unsigned\ ciur[100000000];\\int\ main() \{\\ ...\\\}[/tex]
◘ Declaram ciurul in functia main dinamic - recomandat. Asa putem aloca doar dimeniunea care ne intereseaza. Pentru alocare dinamica pe heap putem folosi in C++ operatorul new[]. Nu uitam sa dealocam la final memoria alocata folosind operatorul delete[],
exemplu :
int main() {
int n;
cin >> n;
unsigned* ciur = new unsigned[n]; //Aloca dinamic memorie pentru n valori de tip unsigned
//....
delete[] ciur; //Elibereaza memoria alocata dinamic
}
◘ Folosim vectori/array din STL. In C++ avem diverse containere. Printre acestea se enumera vectori, array, map, set si alte structuri de date. Pentru folosirea vectorului din STL e necesar sa includem biblioteca <vector>. Citeste documentatia pentru mai multe informatii. Pentru problema cu ciurul e posibil sa ne avantajeze set mai mult decat un vector.
exemplu :
int main() {
int n;
cin >> n;
vector<unsigned> ciur; //Declara vector care retine elemente de tip vector
ciur.resize(n); //Redimensioneaza dimensiunea vectorului pentru n elemente
}
Vă mulțumim că ați ales să vizitați site-ul nostru dedicat Informatică. Sperăm că informațiile disponibile v-au fost utile. Dacă aveți întrebări sau aveți nevoie de asistență suplimentară, vă rugăm să ne contactați. Revenirea dumneavoastră ne va bucura, iar pentru acces rapid, nu uitați să ne salvați la favorite!