Informatică, întrebare adresată de alesmile678, 8 ani în urmă

Cum ar trebui sa declar un ciur in c++, daca numerele sunt foarte mari ? (ERATOSTENE)

Răspunsuri la întrebare

Răspuns de andrei750238
1

►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 :

unsigned\ ciur[100000000];\\int\ main() \{\\	...\\\}

◘ 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

}

Alte întrebări interesante