Zasobnik?

Keleen
Matfyz(ák|ačka) level II
Příspěvky: 90
Registrován: 19. 1. 2005 22:20

Zasobnik?

Příspěvek 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.
Kuba
Matfyz(ák|ačka) level II
Příspěvky: 92
Registrován: 2. 6. 2005 22:55
Typ studia: Informatika Mgr.
Bydliště: Praha - Dejvice
Kontaktovat uživatele:

Re: Zasobnik?

Příspěvek 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
Naposledy upravil(a) Kuba dne 26. 1. 2006 17:36, celkem upraveno 4 x.
Uživatelský avatar
jaruch
Supermatfyz(ák|ačka)
Příspěvky: 376
Registrován: 5. 2. 2005 14:06
Typ studia: Informatika Mgr.
Kontaktovat uživatele:

Re: Zasobnik?

Příspěvek 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 :D
Shit shit, who the fuck is shooting us?
I've got a universe to master...
Uživatelský avatar
Eubie
Matfyz(ák|ačka) level III
Příspěvky: 295
Registrován: 8. 10. 2005 15:35
Typ studia: Informatika Bc.
Kontaktovat uživatele:

Příspěvek 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).
krystof
Matfyz(ák|ačka) level III
Příspěvky: 186
Registrován: 18. 1. 2005 15:15
Typ studia: Informatika Mgr.
Bydliště: Brno / 17. Listopad
Kontaktovat uživatele:

Re: Zasobnik?

Příspěvek 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 :D


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...)
Uživatelský avatar
sandius
Matfyz(ák|ačka) level II
Příspěvky: 60
Registrován: 7. 1. 2005 00:52
Typ studia: Informatika Bc.
Bydliště: Tabor / Troja
Kontaktovat uživatele:

Re: Zasobnik?

Příspěvek 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.
krystof
Matfyz(ák|ačka) level III
Příspěvky: 186
Registrován: 18. 1. 2005 15:15
Typ studia: Informatika Mgr.
Bydliště: Brno / 17. Listopad
Kontaktovat uživatele:

Re: Zasobnik?

Příspěvek 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...
Uživatelský avatar
sandius
Matfyz(ák|ačka) level II
Příspěvky: 60
Registrován: 7. 1. 2005 00:52
Typ studia: Informatika Bc.
Bydliště: Tabor / Troja
Kontaktovat uživatele:

Re: Zasobnik?

Příspěvek 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
Odpovědět

Zpět na „2005“