Stránka 1 z 1
Zasobnik?
Napsal: 26. 1. 2006 13:02
od Keleen
Tak jsem na fearu nasel kus kodu kde se ma oznacit co muze hodit vyjimku,ale jaksi bez reseni a nejsem si uplne jistej?
Nechce se na to nekdo skilled podivat?:)
Kód: Vybrat vše
class SStk {
public:
/* ... */
void push(const std::string & s);
private:
std::string * p_;
int allocated_, used_;
};
void SStk::push (const std::string & s) {
if (used_ >= allocated) {
int n2 = (allocated_ +1) * 2;
std::string * p2 = new string[n2];
for(int i = 0; i < used_; ++i)
p2[i] = p_[i];
delete[] p_;
p_ = p2;
allocated_ = n2;
}
p_[used_] = s;
++used_;
}
Diky.
Re: Zasobnik?
Napsal: 26. 1. 2006 13:52
od Kuba
Kód: Vybrat vše
class SStk {
public:
/* ... */
void push(const std::string & s);
private:
std::string * p_;
int allocated_, used_;
};
void SStk::push (const std::string & s) {
if (used_ >= allocated) {
int n2 = (allocated_ +1) * 2; //1
! std::string * p2 = new string[n2]; //2
for(int i = 0; i < used_; ++i)
! p2[i] = p_[i]; //3
delete[] p_;
p_ = p2;
allocated_ = n2;
}
! p_[used_] = s; //4
++used_;
}
Ja myslim ze na techto mistech muze dojit k vyjimce (jisty si nejsem, nekdo me prosim opravte)
1. int n2 - když nebude v paměti místo ani na lokální int TOTO VÝJIMKU NEZPUSOBUJE
2. když nebude místo na pole stringů
3. string
p2 se už nemusí vejít do paměti
4. string p_[used_] se už nemusí vejít do paměti
Re: Zasobnik?
Napsal: 26. 1. 2006 14:06
od jaruch
Kuba píše:
Ja myslim ze na techto mistech muze dojit k vyjimce (jisty si nejsem, nekdo me prosim opravte)
1. int n2 - když nebude v paměti místo ani na lokální int
2. když nebude místo na pole stringů
3. string p2 se už nemusí vejít do paměti
4. string p_[used_] se už nemusí vejít do paměti
myslim, ze to prve vynimku nevyola, lebo je to operacia na vstavanom type, ostatne by som oznacil rovnako... new moze vynimku vyvolat a pri tych priradeniach sa kopiruju stringy(copy konstruktor???), takze tam tiez...
ale odbornik na C++ nie som, takze odpoved berte nezavazne
Napsal: 26. 1. 2006 15:19
od Eubie
Ahoj, já to vím zcela jistě. Chybu hodí jen body 2,3,4 (tuhle písemku už mam za sebou za jedna).
Re: Zasobnik?
Napsal: 26. 1. 2006 15:19
od krystof
jaruch píše:Kuba píše:
Ja myslim ze na techto mistech muze dojit k vyjimce (jisty si nejsem, nekdo me prosim opravte)
1. int n2 - když nebude v paměti místo ani na lokální int
2. když nebude místo na pole stringů
3. string p2 se už nemusí vejít do paměti
4. string p_[used_] se už nemusí vejít do paměti
myslim, ze to prve vynimku nevyola, lebo je to operacia na vstavanom type, ostatne by som oznacil rovnako... new moze vynimku vyvolat a pri tych priradeniach sa kopiruju stringy(copy konstruktor???), takze tam tiez...
ale odbornik na C++ nie som, takze odpoved berte nezavazne
opravdu se kopiruji cele stringy (teda jako jejich znaky)? bych spis rek, ze string je jenom reference-counted pointer na vlastni telo stringu a pri prirazeni se string jen presmeruje (ale jako nevim 100%, jen mam velmi silny pocit, ze to tak je...)
Re: Zasobnik?
Napsal: 26. 1. 2006 15:26
od sandius
krystof píše:
opravdu se kopiruji cele stringy (teda jako jejich znaky)? bych spis rek, ze string je jenom reference-counted pointer na vlastni telo stringu a pri prirazeni se string jen presmeruje (ale jako nevim 100%, jen mam velmi silny pocit, ze to tak je...)
Dost mozna; ale neni to implementacne zavisly? Normu sem necet, ani se na to nechystam, ale ze by i presne diktovala, jak to ma vyrobce napsat, to se mi nezda... No a pokud by to teda bylo implementacne zavisly, tak by to tam tu vyjimku hodit mohlo.
Re: Zasobnik?
Napsal: 26. 1. 2006 15:30
od krystof
sandius píše:
Dost mozna; ale neni to implementacne zavisly? Normu sem necet, ani se na to nechystam, ale ze by i presne diktovala, jak to ma vyrobce napsat, to se mi nezda... No a pokud by to teda bylo implementacne zavisly, tak by to tam tu vyjimku hodit mohlo.
pro string jsem taky normu necet, ale treba u jednotlivych containeru je urceny, jakou ma mit ktera operace asymptotickou slozitost - tak bych predpokladal, ze u stringu by to mohlo byt taky... A kdyz holt ma byt prirazeni konstantni, tak tam toho moc nezkopirujes...
Re: Zasobnik?
Napsal: 26. 1. 2006 16:34
od sandius
krystof píše:pro string jsem taky normu necet, ale treba u jednotlivych containeru je urceny, jakou ma mit ktera operace asymptotickou slozitost - tak bych predpokladal, ze u stringu by to mohlo byt taky... A kdyz holt ma byt prirazeni konstantni, tak tam toho moc nezkopirujes...
Tohle vypada jako odpoved; akorat je to trochu stary (1998).
http://groups.google.com/group/comp.std ... 4d11e77a98