![]() |
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! |
Citiraj:
Citiraj:
|
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... |
Citiraj:
How to create dynamic array |
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... |
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 :) |
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. |
Citiraj:
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 |
Citiraj:
Code:
int *ptr1 = &a[0], *ptr2 = &a[10], *ptr3 = &a[100]; 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... :p ;) |
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 ... |
Sva vremena su GMT +2. Sada je 23:45. |
Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 1999-2024 PC Ekspert - Sva prava pridržana ISSN 1334-2940
Ad Management by RedTyger