Jaka jest różnica między "stl" A "C++ Standard Library"?

Ktoś przyniósł Ten artykuł do mojej uwagi, że twierdzi (parafrazuję) termin STL jest niewłaściwie używany w odniesieniu do całej biblioteki standardowej C++ zamiast części, które zostały wzięte z SGI STL.

(...) odnosi się do "STL", pomimo faktu, że bardzo niewiele osób nadal korzysta z STL (który został zaprojektowany w SGI).

Części biblioteki standardowej C++ były oparte na częściach STL, i to te części, że wiele osób (w tym kilku autorów i notorycznie popełniane błędy cplusplus.com) nadal określa się jako "STL". Jest to jednak niedokładne; w rzeczywistości standard C++ nigdy nie wspomina o "STL", a między nimi występują różnice w treści.

(...) "STL" jest rzadko używany w odniesieniu do bitów stdlib, które są oparte na SGI STL. Ludzie myślą, że to cała standardowa biblioteka. Umieszcza się go w CVs. I wprowadza w błąd.

Prawie nic nie wiem o historii C++więc nie mogę ocenić poprawność artykułu. Czy powinienem powstrzymać się od używania terminu STL? A może to odosobniona opinia?

Author: Community, 2011-03-05

7 answers

"STL" został napisany przez Alexandra Stepanova na długo przed standaryzacją C++. C++ istniał do lat 80., ale to, co teraz nazywamy " C++", jest językiem znormalizowanym w ISO/IEC 14882: 2014(i wcześniejszych wersjach, takich jak ISO/IEC 14882: 2011).

STL był już szeroko stosowany jako biblioteka dla C++, dająca programistom dostęp do kontenerów, iteratorów i algorytmów. Podczas standaryzacji Komitet językowy zaprojektował części Biblioteka Standardowa C++ (która jest częścią standardu języka) do bardzo ściśle pasuje do STL.

Przez lata Wiele osób-w tym wybitni autorzy książek i różne strony internetowe - nadal odnosiło się do biblioteki standardowej C++ jako "STL", pomimo faktu, że te dwa podmioty są oddzielne i że istnieją pewne różnice. Różnice te są jeszcze bardziej widoczne w nadchodzącym nowym standardzie C++, który zawiera różne funkcje i znacznie zmienia niektóre klasy.

Oryginalny STL jest obecnie często nazywany "implementacją standardowej biblioteki szablonów C++" (raczej wstecz do rzeczywistej historii!), w ten sam sposób, w jaki Microsoft Visual Studio lub GCC dostarcza implementację biblioteki standardowej C++. Ale "standardowa biblioteka szablonów" i "biblioteka Standardowa" to nie to samo.

Walka polega na tym, czy aktualna Biblioteka Standardowa powinna być nazywana " STL " w całości czy w części i / lub czy ma znaczenie co nazywa się.

Dla " STL "

Istnieje szkoła myślenia, która mówi, że wszyscy wiedzą teraz, że " STL "oznacza bibliotekę standardową, tak jak wszyscy teraz wiedzą, że "C++" jest językiem znormalizowanym przez ISO.

Obejmuje również tych, którzy wierzą, że to naprawdę nie ma znaczenia tak długo, jak wszystkie strony rozumieją, o czym mówi się.

Jest to termin jeszcze bardziej rozpowszechniony przez naturę bestii, z której wiele intensywnie korzysta z C++ funkcja znana jako "szablony".

Dla "biblioteki standardowej C++" (lub stdlib)

Jest jednak inna szkoła myślenia-do której się zapisuję-która mówi, że jest to mylące. Osoby uczące się C++ po raz pierwszy nie znają tego rozróżnienia i mogą nie zauważyć niewielkich różnic językowych.

Autor tego artykułu wielokrotnie spotykał się z ludźmi, którzy wierzą, że cała biblioteka Standardowa C++ jest STL, w tym funkcje to nigdy nie było częścią STL. Większość wokalnych zwolenników "the STL" natomiast doskonale wie, co przez to rozumie i nie wierzy, że nie każdy to "rozumie". Oczywiście użycie tego terminu nie jest jednolite.

Ponadto istnieją biblioteki podobne do STL, które są w rzeczywistości implementacjami oryginalnego STL, a nie biblioteki standardowej C++. Do niedawna jednym z nich był STLPort (i nawet tam, zamieszanie obfituje!).

Dalej, C++ Standard nie zawiera nigdzie tekstu "STL", a niektórzy ludzie zwykle używają zwrotów takich jak "The stl is included in the C++ Standard Library", co jest po prostu niepoprawne.

Wierzę, że kontynuowanie propagowania użycia tego terminu w ten sposób doprowadzi do tego, że nieporozumienie będzie trwało wiecznie. Niestety, próba zmiany rzeczy może być całkowicie nieproduktywna, nawet jeśli ma to być na lepsze. Możemy po prostu utknąć z podwójnymi znaczeniami na zawsze.

Wniosek

Doceniam, że ten post był trochę stronniczy: napisałem artykuł, do którego podlinkowałeś. :) W każdym razie, mam nadzieję, że to pomoże nieco lepiej wyjaśnić bitwę.

Aktualizacja 13/04/2011

Oto trzy perfect przykłady kogoś, kto używa " STL " do odwoływania się do całej biblioteki standardowej C++. Wciąż mnie dziwi, że tak wielu ludzi klnie na ślepo, że nikt nigdy tego nie robi, kiedy widać to prawie codziennie.

 594
Author: Lightness Races in Orbit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:33

Nie ma jednej poprawnej odpowiedzi. Alexander Stepanov opracował bibliotekę, którą nazwał STL (pracując w tym czasie dla HP). Biblioteka ta została następnie zaproponowana do włączenia do standardu C++.

To w zasadzie" rozwidlenie " rozwoju. Komitet obejmował niektóre części, odrzucał inne całkowicie ,a kilka przeprojektował (z udziałem Aleksandra). Rozwój oryginalnej biblioteki został później przeniesiony do Silicon Graphics, ale kontynuowany oddzielnie od standardu C++ biblioteka.

Po dodaniu tych elementów do biblioteki standardowej, niektóre inne części biblioteki standardowej zostały zmodyfikowane, aby lepiej pasowały do tego, co zostało dodane (np., begin, end, rbegin i rend zostały dodane do std::string, więc może być używany jak kontener). Mniej więcej w tym samym czasie, większość biblioteki (nawet fragmenty, które były całkowicie niepowiązane) zostały wykonane w szablonach, aby pomieścić różne typy (np. standardowe strumienie).

Niektórzy ludzie również używają STL jako tylko krótka forma "biblioteki standardowej".

Oznacza to, że gdy ktoś używa terminu "STL", może odnosić się do każdej z około pół tuzina różnych rzeczy. Na dobre i na złe, większość ludzi, którzy go używają, zdaje się ignorować wielość znaczeń i zakładać, że wszyscy inni rozpoznają to, do czego się odnoszą. Prowadzi to do wielu nieporozumień, a przynajmniej kilku poważnych wojen płomieniowych, które sprawiły, że większość uczestników wyglądała na głupią, ponieważ po prostu rozmawiali o całkowicie różne rzeczy.

Niestety, zamieszanie prawdopodobnie nie ustanie. O wiele wygodniej jest odwoływać się do "STL" niż czegoś w rodzaju "kontenerów, iteratorów i algorytmów w bibliotece standardowej C++, ale nie wliczając std::string, nawet jeśli może działać jak kontener."Mimo, że "C++ standard library" nie jest tak długa i niezgrabna, " STL " jest wciąż dużo krótsza i prostsza. Dopóki ktoś nie wymyśli terminów bardziej precyzyjnych (w razie potrzeby), i równie wygodne, "STL" będzie nadal używane, a zamieszanie będzie nadal wynikać.

 86
Author: Jerry Coffin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-18 04:38:57

Termin " stl "lub" standardowa biblioteka szablonów " nie pojawia się nigdzie w standardzie C++ ISO 14882. Więc odwoływanie się do biblioteki standardowej C++ jako STL jest błędne. Termin" Biblioteka Standardowa C++ "lub" biblioteka standardowa " jest oficjalnie używany przez ISO 14882:

ISO 14882 C++ Standard:

17 - Wprowadzenie do biblioteki [lib .biblioteka]:

  1. klauzule te opisują treść Biblioteka Standardowa C++ , Jak a dobrze uformowany program C++ wykorzystuje biblioteka, a jak zgodne realizacja może zapewnić podmioty w bibliotece.

...

STL jest biblioteką zaprojektowaną przez Alexandra Stepanova, niezależną od standardu C++. Jednak niektóre komponenty biblioteki standardowej C++ obejmują komponenty STL, takie jak vector, list oraz algorytmy takie jak copy i swap.

Ale oczywiście standard C++ zawiera znacznie więcej rzeczy poza stl, więc termin "Biblioteka standardowa C++" jest bardziej poprawna (i jest tym, co jest faktycznie używane przez dokumenty standardów).

 55
Author: In silico,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-05 17:54:02

Ostatnio to samo argumentowałem, ale wierzę, że można pozwolić na odrobinę tolerancji. Jeśli Scott Meyers popełni ten sam błąd, jesteś w dobrym towarzystwie.

 23
Author: Mark Ransom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-05 17:58:23

Z GNU Standard C++ Library (libstdc++) FAQ :


STL (Standard Template Library) była inspiracją dla dużych fragmentów biblioteki standardowej C++, ale terminy nie są wymienne i nie znaczą tego samego. Biblioteka Standardowa C++ zawiera wiele rzeczy, które nie pochodzą z STL, a niektóre z nich nie są nawet szablonami, takimi jak std::locale i std::thread.

Libstdc++ - v3 zawiera wiele kodu z SGI STL (ostateczna merge pochodzi z wydania 3.3). Kod w libstdc++ zawiera wiele poprawek i zmian w porównaniu do oryginalnego kodu SGI.

W szczególności, string nie jest z SGI i nie korzysta z ich klasy "rope" (chociaż jest to opcjonalne rozszerzenie), ani valarray, ani niektóre inne. Klasy takie jak vector<> były z SGI, ale zostały znacznie zmodyfikowane.

Więcej informacji na temat ewolucji libstdc++ można znaleźć w API evolution i wstecz zgodność dokumentacja.

FAQ dla STL SGI jest nadal zalecane czytanie.


Dla twojej wiadomości, Od marca 2018 nawet oficjalna strona STL www.sgi.com/tech/stl / zniknął.

 8
Author: vstepaniuk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-02 03:48:46

Biblioteka Standardowa C++ zawiera C++ STL

Zawartość biblioteki standardowej C++ to:

  1. C++ Wersja pliku nagłówkowego języka C
  2. plik nagłówkowy C++ IO
  3. C++ STL

Więc proszę nie mylić biblioteki standardowej C++ z STL.

 0
Author: Cristime,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-02 03:42:24

W słowach laika: STL jest częścią biblioteki standardowej.

Biblioteka Standardowa C++ jest grupowana w:

  1. Standardowa Biblioteka Funkcjonalna - I / O, - Obsługa łańcuchów i znaków, - Matematyczne, - Czas, Data i lokalizacja, - Dynamiczna alokacja, - Różne, - Funkcje szerokoznakowe

  2. Standardowa biblioteka OOP i Generics - Standardowe Klasy I/O C++ - Klasa String - Klasy Numeryczne - Klasy kontenerów STL - Algorytmy STL - Funkcja STL Obiekty - Iteratory STL - Rozdzielacze STL - Biblioteka lokalizacyjna - Klasy Obsługi Wyjątków -Różne Biblioteki Wsparcia

Więc jeśli mówisz o STL jako bibliotece standardowej, jest OK i pamiętaj, że implementacje STL pozwalają na generyki, a inne są bardziej specyficzne dla jednego typu.

Proszę zapoznać się z https://www.tutorialspoint.com/cplusplus/cpp_standard_library.htm

 0
Author: Mohd Zaki Zakaria,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-12 07:05:37