|
![]() |
#1 |
Premium
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! |
![]() |
![]() |
![]() |
#2 | ||
E Pluribus UNIX
Datum registracije: Oct 2002
Lokacija: M82
Postovi: 6,748
|
Citiraj:
Citiraj:
__________________
https://2.71828182845904523536028747...966967627.com/
Programer Rok od dva mjeseca u stvari znači četiri, ali nikako ispod šest. |
||
![]() |
![]() |
|
|
Oglas
|
|
![]() |
#3 |
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... |
![]() |
![]() |
![]() |
#4 | |
Guest
Datum registracije: Jun 2008
Lokacija: Splity
Postovi: 3,003
|
Citiraj:
How to create dynamic array |
|
![]() |
![]() |
![]() |
#5 | |
E Pluribus UNIX
Datum registracije: Oct 2002
Lokacija: M82
Postovi: 6,748
|
Citiraj:
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. |
|
![]() |
![]() |
![]() |
#6 |
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 ![]() |
![]() |
![]() |
![]() |
#7 | |
E Pluribus UNIX
Datum registracije: Oct 2002
Lokacija: M82
Postovi: 6,748
|
Citiraj:
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. |
|
![]() |
![]() |
![]() |
#8 | |
Registered User
Datum registracije: Jun 2007
Lokacija: cro
Postovi: 42
|
To naravno ovisi o tipu objekta ( built-in ili user-defined )... Citiraj:
no new moze sve sto moze i malloc pa i bolje ( IMHO ),nezeleci pri tome da ulazim u raspravu s ( ocito ) C programerom ![]() pozdrav |
|
![]() |
![]() |
![]() |
#9 | |||
E Pluribus UNIX
Datum registracije: Oct 2002
Lokacija: M82
Postovi: 6,748
|
Recimo, za polje pointera na integere? Code:
int *ptr1 = &a[0], *ptr2 = &a[10], *ptr3 = &a[100]; int *ptrs[] = { ptr1, ptr2, ptr3 } Citiraj:
Osobno, ne znam kako bi se to izvelo, pa ako ti nije tesko objasniti ukratko ili barem baciti kakvu referencu ili link. Citiraj:
Citiraj:
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. |
|||
![]() |
![]() |
![]() |
#10 |
Registered User
Datum registracije: Jun 2007
Lokacija: cro
Postovi: 42
|
ahh nedas se ti ![]() 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 ... |
![]() |
![]() |
|
|
Oglas
|
|
![]() |
|
|