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 :D

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 :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...)

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