Korzystaj z STL

Jeśli ktoś jeszcze o tym nie wie - standardowa biblioteka C++ obejmuje obszerną, wydajną i elegancką bibliotekę implementującą rozmaite kontenery (tablice dynamicznej długości, listy, kolejki, zbiory, tablice asocjacyjne) i operujące na nich algorytmy (wyszukiwanie, sortowanie, dzielenie i łączenie itp). Jest nią STL. Implementacja STL dostarczana jest z każdym w miarę nowym kompilatorem - a w razie potrzeby można też wykorzystać darmową implementację firmy SGI (jest to kontynuacja oryginalnej implementacji Stepanova, utrzymywanej wcześniej przez HP) lub wyprowadzaną z niej wersję o nazwie STLport (która zawiera ten sam kod opakowany w sposób ułatwiający jego wykorzystywanie na szerokim zestawie platform i kompilatorów). Dokumentacja STL znajduje się w najnowszym (trzecim) wydaniu książki Stroustroupa, bogatą dokumentację HTML można pobrać z stron SGI.

Dyskusja na temat korzystania lub nie z STL miewa dwa aspekty:

  • z moim kompilatorem przychodzi inna biblioteka o podobnych funkcjach;
  • sam napiszę lepsze klasy.

Używanie biblioteki przychodzącej z kompilatorem (np. klas kontenerowych MFC czy VCL) moze być uzasadnione - zwłaszcza gdy są już one dobrze znane albo i tak musimy z nich korzystać przekazując dane do klas realizujących interfejs użytkownika. Trzeba jednak pamiętać, że:

  • takiego kodu nie możemy przenieść na inny kompilator albo inny system - co może się nam zdarzyć nawet jeśli w tej chwili o tym nie myślimy (starczy spojrzeć ile firm obecnie wykonuje łamańce, by wypuścić Linuxową wersję swoich produktów pierwotnie projektowanych dla Windows i tylko dla Windows) - i to niekoniecznie z naszej woli (w ostatnich dniach czytałem rozpaczliwe pytania co robić jakiegoś użytkownika Visual Age for C++ po wstrzymaniu przez IBM rozwoju tego kompilatora na platformy PC);
  • STL jest naprawdę dobrze przemyślany i zaprojektowany - w przeciwieństwie do niektórych specyficznych bibliotek.

Natomiast pisanie własnych klas implementujących listy, tablice o zmiennej długości itp powinno być srodze karalne. Po pierwsze szkoda na to czasu - który lepiej wykorzystać na robienie rzeczy faktycznie użytecznych, po drugie znakomicie utrudnia to innym wykorzystywanie przygotowanego przez nas kodu i łączenie go z kodem innych osób a po trzecie nasz kod jest zazwyczaj mniej efektywny i dużo mniej wytestowany niż standardowe rozwiązania.

komentarze obsługiwane przez Disqus