Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

prawidłowa implementacja stosu

Ostatnio zmodyfikowano 2015-03-31 08:17
Autor Wiadomość
dek12
Temat założony przez niniejszego użytkownika
prawidłowa implementacja stosu
» 2015-03-29 19:50:26
Dzień dobry, dopiero poznaje te struktury, zrobiłem już stos, kolejkę, wszystko działa jak należy tylko zastanawiam się nad jedną kwestią. Jak prawidłowo obsłużyć przypadek, gdy ktoś będzie chciał zdjąć element ze stosu na samym początku (gdy stos jest pusty). Narazie pop wygląda tak:
C/C++
if( !isEmpty() ) // metoda zwraca true jeśli stos pusty
{
    T tmp = top->date;
    node * tmp_ptr = top;
    top = tmp_ptr->next;
    delete tmp_ptr;
    stack_size--;
    return tmp;
}
else
{
    std::cout << "Stack is empty!";
}

tyle, że pop samo w sobie zwraca jakąś wartość. Gdy wejdzie w elsa, to zwróci jakiś śmieci. Jak to rozwiązac tak elegancko?
P-129491
pekfos
» 2015-03-29 20:04:45
pop samo w sobie zwraca jakąś wartość. Gdy wejdzie w elsa, to zwróci jakiś śmieci. Jak to rozwiązac tak elegancko?
Na przykład tak, jak jest w bibliotece standardowej - nie zwracać niczego z pop(). Ewentualnie możesz rzucić wyjątkiem.
P-129498
akwes
» 2015-03-31 08:17:26
Może to śmieszne, ale napisanie dobrego interfejsu do stosu rodziło się w mękach i bólach debaty nad tym czy to w ogóle możliwe. Zestaw połączonych artykułów z GotW na ten temat znajdziesz w książce Exceptional C++ (posiada polską wersję).

Jeżeli temat Cię zainteresuje to w książce C++: Concurrency in Action znajdziesz poszerzenie tematu o projektowanie interfejsu stosu pod względem bezpieczeństwa wielowątkowego dostępu.

P-129609
« 1 »
  Strona 1 z 1