prawidłowa implementacja stosu
Ostatnio zmodyfikowano 2015-03-31 08:17
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: if( !isEmpty() ) { 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? |
|
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. |
|
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.
|
|
« 1 » |