moim zdaniem rozróżnienie między STL
i C++ Standardowa biblioteka jest nieco podobna do relacji między Linux
i GNU/Linux
:
Historycznie, STL był rdzeń (w tym pojemniki, algorytmy i iteratory itp.), a standardowa biblioteka jest metaforycznie kompletnym systemem operacyjnym zbudowanym wokół rdzenia wyposażającego wszystko inne. Standardowa biblioteka dokonała modyfikacji na górze STL, ale ta część standardowej biblioteki ma swoje korzenie w STL. (Pamiętasz, jak ciężko ludzie GNU próbowali nam przypomnieć, że Linux jest tylko jądrem i nalegać na wywołanie OS GNU/Linux?)
Jeśli standardowa komisja pisała papier zamiast standardu C++, prawdopodobnie trzeba potwierdzić, że w całej nakładającej się domenie jest wszędzie STL
, zamiast zgłaszać różnice.
Jak zauważył w komentarzach w this answer Bjarne Stroustrup, wynalazca C++, described STL jak
STL (dalej "Standard Template Library", to jest, pojemniki i algorytm ramach ISO C++ biblioteki standardowej)
Co więcej, stanowi istotę STL, który został wprowadzony do biblioteki standardowej jest koncepcja, że każdy algorytm STL musi mieć wcześniej określoną najgorszy przypadek złożoność algorytmiczna, co czyni go nieistotną sprawą, która implementuje STL.Trzeba tylko zwrócić uwagę na specyfikację kontenera lub algorytmu STL, historycznie umieszczonego na stronie SGI wśród innych źródeł. Było to dość ważne w czasach prehistorycznych, kiedy każdy mógł wymyślić własne pojemniki o różnych złożonościach obliczeniowych.
Do innych ważnych funkcji STL wprowadzonych do biblioteki standardowej należy nowy paradygmat programowania funkcjonalnego, jaki został urzeczywistniony w obecnym <algorithm>
i wszędzie indziej, co, moim zdaniem, zrewitalizowało C++ jako język, uzupełniając tradycyjny paradygmat programowania obiektowego.
W tym sensie iz powrotem na swoje pytanie, myślę, że to tylko sprawiedliwe, by powiedzieć, że pojemniki jak vector
należą do STL
(pierwotnie) i biblioteki standardowej.
O ile mi wiadomo, to, co kiedyś było znane jako STL, jest częścią standardowej biblioteki C++. Nie ma już kontenera STL. Są tylko częścią standardowej biblioteki C++. –
Dziękuję Rahah. Myślę, że powodem, dla którego czasami nie używamy STL, jest to, że kosztuje więcej pamięci. Tak jak używamy mapy, pamięć każdego elementu jest ciągła. Tak więc zastanawiam się, kiedy ludzie mówią, że nie używają STL, oznacza to użycie klasy/struktury/kontenera, który oszczędziłby pamięć. – leon
Oczywiście, zależy to od projektu, czy ma sens korzystanie z pewnych części standardowej biblioteki, czy nie, a tak naprawdę jest kilka przypadków, w których nie chcesz ich używać. Ale mam wrażenie, że czasami jest to jedna z najgorszych form przedwczesnej optymalizacji. –