Скинути презентацију
Отпремање презентације траје. Молимо да сачекате
1
Dinamičke strukture podataka
2
Za zauzimanje i oslobađanje memorije u C++ koriste se operatori new i delete.
Operator new odvaja mem. prostor za smeštanje podatka ili niza podataka i vraća adresu odvojenog prostora. Koristi se na sledeći način: new tip new tip (početna vrednost) new tip [dužina]....[dužina]
3
Dinamički objekti (dinamičke promenljive) se ne pojavljuju u odeljku za opis promenljivih, pa im se ne može pristupati preko imena. Pristup dinamičkoj promenljivoj moguć je samo pomoću pokazivača!
4
1) new tip Memorija se dodeljuje nekom podatku: int *i=new int;
5
2) new tip (početna vrednost)
Memorija se dodeljuje nekom podatku i odmah mu se dodeljuje početna vrednost: int *j=new int(10);
6
3) new tip [dužina]....[dužina]
Memorija se dodeljuje nizu podataka datog tipa: int *a=new int[10];
7
Operator new za razliku od f-ja C-a sam određuje veličinu mem
Operator new za razliku od f-ja C-a sam određuje veličinu mem. prostora i vraća pokazivač na njega. Postoji mogućnost inicijalizacije sa željenim vrednostima i mogućnost izdvajanja mem. prostora za nizove. Ako iz nekog razloga prostor u memoriji ne može biti izdvojen vraća se NULL ili se kod novijih kompajlera greška prijavljuje izuzetkom bad_alloc.
8
Oslobađanje memorijskog prostora izdvojenog operatorom new realizuje se operatorom delete.
Koristi se na sledeći način: delete adresa --- delete i; delete adresa --- delete j; delete []adresa --- delete []a; Ako se ne navedu zagrade [] oslobađa se samo prvi element niza (bez ikakvog upozorenja). Preostali elementi će i dalje zauzimati memorijski prostor ali će biti nedostupni.
9
jedan ceo broj i int *i; i = new int; delete i; i int *i; 10
10
niz od 10 celih brojeva int *a; a=new int[10]; a delete []a;
11
matrica celih brojeva 4x3
int **a; a=new int*[4]; a[0]=new int[3]; a[1]=new int[3]; a[2]=new int[3]; a[3]=new int[3]; delete []a[0]; delete []a[1]; delete []a[2]; delete []a[3]; delete []a;
12
Primer 1: Formirati dinamički jednodimenzionalni niz celih brojeva i prikazati sadržaj niza.
#include <iostream> #include <iomanip> using namespace std; int main() { int *a, n; cout<<"n="; cin>>n; a=new int[n]; if (a==NULL) cout<<"Nedovoljno memorije!"; else for(int i=0; i<n; i++) cout<<"a["<<i<<"]="; cin>>a[i]; } cout<<"\nniz a:"<<endl; int *b=a; for(i=0; i<n; i++) cout<<setw(4)<<*b++; //{cout<<setw(4)<<*b; b++;} delete []a; return 0;
13
Primer 2: Formirati dinamički dvodimenzionalni niz celih brojeva i odrediti najveći element.
#include <iostream> #include <iomanip> using namespace std; int Max(int **x, int y, int z) { int max=x[0][0]; for (int i=0; i<y; i++) for(int j=0; j<z; j++) if(x[i][j]>max) max=x[i][j]; return max; } int main() int **a; int n, m; cout<<"ucitati broj vrsta: "; cin>>n; a=new int *[n]; //niz od n pokazivaca na int cout<<"ucitati broj kolona: "; cin>>m;
14
for (int i=0; i<n; i++)
{ a[i]=new int[m]; //dodeljuje mem. prostor i-toj vrsti matrice for (int j=0; j<m; j++) //ucitava elemente i-te vrste cin>>a[i][j]; } cout<<"max="<<Max(a,n,m); //max. element matrice cout<<"\n matrica a:\n"; //ispis elemenata matrice for(i=0; i<n; i++) cout<<endl; for(int j=0; j<m; j++) cout<<setw(4)<<a[i][j]; for(i=0; i<n; i++) //oslobadjanje memorije koju je zauzimala matrica delete []a[i]; delete []a; return 0;
Сличне презентације
© 2024 SlidePlayer.rs Inc.
All rights reserved.