rvitinn

C++ vector notaur sem buffer

C++ forritarar urfa a temja sr a nota STL safni. a samanstendur af gagnaklsum, algrithum og msu dti. ar eru t.d. iostream klasarnir, string klasinn, exceptions og margt fleira.

Eitt af v sem margir lenda vandrum me STL er a egar maur arf a nota strikerfisfll er ekki hgt a senda STL gagnaklasana beint au. Yfirleitt er etta lti ml, ar sem bei er um char* getur maur t.d. nota c_str() member falli std::string klasanum.

a er ansi algengt a maur urfi a lesa ggn inn array. C++ detta menn oft a a nota C aferir, skilgreina char array og afrita svo ggnin yfir annan gagnaklasa. etta er lagi mean ggnin eru ltil og hgt er a geyma ggnin hlaa en egar a arf a new/malloca minninu er httan minnisleka tluver.

sta ess a nota char* og svoleiis vibj er mli nttrulega a nota std::vector, a er auveldara en a ltur t fyrir!

std::vector<char> buffer(4096); // 1
int res = read(&buffer[0], buffer.size()); // 2
buffer.resize(res); // 3
Maur byrjar (1) v a ba til vector sem hefur essu tilviki plss fyrir 4096 stk, v nst vsa g fremsta stak vectorsins (2), C++ staallinn tryggir a ggnin vector eru alltaf samliggjandi minni. A lokum er nausynlegt a kalla resize() falli vectorinn (3). etta er gert til ess a staan vectornum s rtt annig a t.d. size() member falli skili rttu gildi, jafnvel res vri 4096 essu tilviki arf a kalla resize.

Ekki arf a hugsa um a eya ggnunum vectornum, v vectorinn sr um a eya eim egar hann eyist. Ef ert a forrita C++ hefur enga afskun til a gera char* buffer = new char[4096]; framar.

Ah, gaman a skrifa eitthva sem allir fla :-P

c++
Athugasemdir

JBJ - 11/11/03 22:07 #

Hrmpf... STL er ekki ofarlega mnum vinsldalistum.

Sem betur fer er C/C++ hru undanhaldi v sem g er a stssast

Matti . - 11/11/03 22:26 #

Hvaa vitleysa, C++ og STL eru yndisleg tl, hefur bara lent eim slmum degi :-)

sk - 12/11/03 13:20 #

a getur teki dltinn tma a venjast v a nota STL, en um lei og flk er bi a n tkum essu er etta algjrlega missanlegt.

Matti . - 12/11/03 19:18 #

STL er kannski frekar "venjulegt" safn. fyrsta lagi er a ekki hlutbundi, msir klasar su arna. Erfir eru einungis notaar villuklsum (exceptions) og iostream klsunum.

etta er aftur mti generskur ki me template stuningi, annig a generkin!! er fengin compile tma en ekki keyrslutma sem skilar sr miklum hraa.

STL ki er stundum frekar ljtur, en ar sem velja urfti milli fegurar og hraa var hrai alltaf valinn! g kem me eitthva fallegt dmi brlega :-)