👤

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

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 vizitat platforma noastră dedicată Informatică. Sperăm că informațiile prezentate v-au fost utile. Dacă aveți întrebări sau aveți nevoie de suport suplimentar, vă rugăm să ne contactați. Vă așteptăm cu drag și data viitoare! Nu uitați să adăugați site-ul nostru la lista de favorite!


Ze Learners: Alte intrebari