Forumi
Home Pravila i pomoć Članovi Kalendar Današnji postovi


Povratak   PC Ekspert Forum > Računala > Software > Web dizajn, programiranje i ostalo
Ime
Lozinka

Odgovori
 
Uređivanje
Staro 15.04.2009., 17:09   #1
Lvx Demos
Premium
Moj komp
 
Datum registracije: Feb 2006
Lokacija: Zagreb
Postovi: 37
C++ dynamic memory allocation i arrayi

Molio bih pomoć oko dvije stvari koje me muče.

1) Kako koristeći dynamic memory allocation stvoriti više dimenzionalan array koristeći varijable kao veličine arraya, npr. array[x][y] gdje su x i y varijable?

2) Želim imati funkciju koja bi učitavala vrijednosti sa konzole (dok se ne učita neki znak, npr. 0) te ih dodavala u array ali tako da duljina arraya nije predodređena - znači tako da se array "produlji" za jedno mjesto sa svakim učitanim brojem. Ako bi mi dali primjer (može i pseudokod), bi bih vrlo zahvalan.

Hvala!
Lvx Demos je offline   Reply With Quote
Staro 15.04.2009., 17:14   #2
Bubba
E Pluribus UNIX
Moj komp
 
Bubba's Avatar
 
Datum registracije: Oct 2002
Lokacija: M82
Postovi: 6,748
Citiraj:
Autor Lvx Demos Pregled postova
1) Kako koristeći dynamic memory allocation stvoriti više dimenzionalan array koristeći varijable kao veličine arraya, npr. array[x][y] gdje su x i y varijable?
malloc();/calloc();
Citiraj:
2) Želim imati funkciju koja bi učitavala vrijednosti sa konzole (dok se ne učita neki znak, npr. 0) te ih dodavala u array ali tako da duljina arraya nije predodređena - znači tako da se array "produlji" za jedno mjesto sa svakim učitanim brojem. Ako bi mi dali primjer (može i pseudokod), bi bih vrlo zahvalan.
realloc();
__________________
https://2.71828182845904523536028747...966967627.com/

Programer
Rok od dva mjeseca u stvari znači četiri, ali nikako ispod šest.
Bubba je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Staro 16.04.2009., 13:52   #3
Dancho
Registered User
 
Datum registracije: Jun 2007
Lokacija: cro
Postovi: 42
funkcije koje ti je Bubba naveo zapravo spadaju u C ( i mogu se naravno bez problema koristiti u C++),no C++ ima svoje operatore new i new[] za dinamicko alociranje memorije ( s pripadajucim delete i delete [] operatorima ),
dakle,
1.) new[] , pa kasnije delete[]
2.) recimo nesto od stl-a, std::vector<>

Probaj nesto sam napisati, pa ako zapnes postaj kod pa ce ti vec netko pomoci...
Dancho je offline   Reply With Quote
Staro 16.04.2009., 13:57   #4
thopok
Guest
 
Datum registracije: Jun 2008
Lokacija: Splity
Postovi: 3,003
Citiraj:
no C++ ima svoje operatore
I ja se pitam kako bi išlo u "čistom" C++.


How to create dynamic array
thopok je offline   Reply With Quote
Staro 16.04.2009., 15:30   #5
Bubba
E Pluribus UNIX
Moj komp
 
Bubba's Avatar
 
Datum registracije: Oct 2002
Lokacija: M82
Postovi: 6,748
Citiraj:
Autor Dancho Pregled postova
funkcije koje ti je Bubba naveo zapravo spadaju u C ( i mogu se naravno bez problema koristiti u C++),no C++ ima svoje operatore new i new[] za dinamicko alociranje memorije ( s pripadajucim delete i delete [] operatorima ),
Nisam ljubitelj C++-a, no nisu li new i delete ujedino i pozivi na konstruktor odnosno destruktor neke klase? Je li sigurno pozivati new nad obicnim poljem tj. objektom koji nema strogo definirane konstruktor/destruktor (specijalno i STL-ovi)?

Uz to, nisam siguran radi li new na multidimenzionalnim poljima. Ako mu treba takvo sto, neka radje koristi neki vec multidimenzionalno zamisljen STL, recimo multimap/multiset ili nesto u tom stilu...
__________________
https://2.71828182845904523536028747...966967627.com/

Programer
Rok od dva mjeseca u stvari znači četiri, ali nikako ispod šest.
Bubba je offline   Reply With Quote
Staro 16.04.2009., 16:25   #6
Dancho
Registered User
 
Datum registracije: Jun 2007
Lokacija: cro
Postovi: 42
Naravno da svaki poziv na new je i ujedno i poziv na konstruktor tog tipa kao sto je i delete poziv na destruktor,nadalje svaki vraceni pointer se provjerava na dva moguca nacina:
1.tzv exception method ( sto je defaultni nacin )
int* array=new int[5];
exception tipa bad_alloc je bacen ako alociranje nije proslo
2.tzv nothrow metoda
int* array=new (nothrow) int[5];
(if array==NULL)
; // error prilikom alociranja

multi polje se kreira kao 1.dimenzionalno (row_size*col_size) te se indeksira
index=column + row_size * row
ili se moze upotrijebiti boost::multi_array class
Dancho je offline   Reply With Quote
Staro 16.04.2009., 18:13   #7
Bubba
E Pluribus UNIX
Moj komp
 
Bubba's Avatar
 
Datum registracije: Oct 2002
Lokacija: M82
Postovi: 6,748
Citiraj:
Autor Dancho Pregled postova
Naravno da svaki poziv na new je i ujedno i poziv na konstruktor tog tipa kao sto je i delete poziv na destruktor
Ok, ali sto je konstruktor a sto destruktor u inicijalizaciji polja?

No sve na stranu to, jeftini "trik" sa prosirivanjem polja pod krinkom visedimenzionalnosti uopce nije ni blizu onome sto malloc radi pri kreiranju visedimenzionalnog polja.
__________________
https://2.71828182845904523536028747...966967627.com/

Programer
Rok od dva mjeseca u stvari znači četiri, ali nikako ispod šest.
Bubba je offline   Reply With Quote
Staro 16.04.2009., 18:37   #8
Dancho
Registered User
 
Datum registracije: Jun 2007
Lokacija: cro
Postovi: 42
Citiraj:
Autor Bubba Pregled postova
Ok, ali sto je konstruktor a sto destruktor u inicijalizaciji polja?
To naravno ovisi o tipu objekta ( built-in ili user-defined )...

Citiraj:
Autor Bubba Pregled postova
No sve na stranu to, jeftini "trik" sa prosirivanjem polja pod krinkom visedimenzionalnosti uopce nije ni blizu onome sto malloc radi pri kreiranju visedimenzionalnog polja.
Naravno,ovaj "trik" je tek jedna od mogucnosti za kreiranje multi-polja,drugi nacini su donekle slozeniji i OT,
no new moze sve sto moze i malloc pa i bolje ( IMHO ),nezeleci pri tome da ulazim u raspravu s ( ocito ) C programerom

pozdrav
Dancho je offline   Reply With Quote
Staro 16.04.2009., 18:52   #9
Bubba
E Pluribus UNIX
Moj komp
 
Bubba's Avatar
 
Datum registracije: Oct 2002
Lokacija: M82
Postovi: 6,748
Citiraj:
Autor Dancho Pregled postova
To naravno ovisi o tipu objekta ( built-in ili user-defined )...
Recimo, za polje pointera na integere?

Code:
int *ptr1 = &a[0], *ptr2 = &a[10], *ptr3 = &a[100];
int *ptrs[] = { ptr1, ptr2, ptr3 }
Sto ovdje predstavlja konstruktor a sto destruktor ako bi se htjelo napraviti polje ptrs?

Citiraj:
Naravno,ovaj "trik" je tek jedna od mogucnosti za kreiranje multi-polja,drugi nacini su donekle slozeniji i OT,
Ali to nije kreiranje visedimenzionalnog polja, nego prljavo baratanje s jednodimenzionalnim poljem, sto je tesko isto...

Osobno, ne znam kako bi se to izvelo, pa ako ti nije tesko objasniti ukratko ili barem baciti kakvu referencu ili link.

Citiraj:
no new moze sve sto moze i malloc pa i bolje ( IMHO ),
U njegovom slucaju, nisam bas siguran, jer malloc(); ima realloc(); koji njemu treba, dok sa new to ide kud i kamo teze.

Citiraj:
nezeleci pri tome da ulazim u raspravu s ( ocito ) C programerom
pozdrav
Istina jest da primarno prica C, no imao sam vecih ili manjih doticaja i s drugim programskim jezicima, pogotovo C++-om.

Bilo kako bilo, standardni C++ libovi ukljucuju i C90 biblioteke medju kojima je i malloc();,, tako da...
__________________
https://2.71828182845904523536028747...966967627.com/

Programer
Rok od dva mjeseca u stvari znači četiri, ali nikako ispod šest.
Bubba je offline   Reply With Quote
Staro 16.04.2009., 19:33   #10
Dancho
Registered User
 
Datum registracije: Jun 2007
Lokacija: cro
Postovi: 42
ahh nedas se ti , nu dobro,

U C++ pojam konstruktora se prosirio i na built-in tipove podataka i jednostavno znaci dodjelu ( assignment )
neke vrijednosti nekoj varijabli prilikom definicije,dakle
1.) C
float pi=3.14159;
2.) C++
float pi(3.14159);
Vjerujem da ti je onda jasno u tvojem primeru sta je sta,
naravno destruktor je onda samo pitanje scopa.

sto se tice multipolja s operatorom new link je tu,malo je suhoparno za citati ali dobro objasnjava nacine alociranja,ako je potrebno mogu dati i druge( koji ukljucuje TMP i slicne nacine )...

Sto se tice c funkcija u c++ preporucljivo je da se koriste novi headeri ( cstdlib i sl. ) samo zbog namespace problematike,ali u svakom slucaju c ima ogroman broj funkcija koje i ja takodjer koristim ...
Dancho je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Odgovori



Pravila postanja
Vi ne možete otvarati nove teme
Vi ne možete pisati odgovore
Vi ne možete uploadati priloge
Vi ne možete uređivati svoje poruke

BB code je Uključeno
Smajlići su Uključeno
[IMG] kod je Uključeno
HTML je Isključeno

Idi na