In my opinion, the distinction between STL
and the c++ standard library is somewhat similar to the relation between Linux
and GNU/Linux
:
Historically, STL was the core (including the containers, algorithms and iterators etc.) and the standard library is, metaphorically, a complete operating system built around the core furnishing everything else. The standard library made modifications on top of STL, but that part of the standard library has roots in STL. (Remember how hard the GNU people tried to remind us that Linux is just a kernel, and insist on calling the OS GNU/Linux?)
If the standard committee were writing a paper instead of a c++ standard, they would probably need to acknowledge STL
everywhere in the overlapping domain, instead of claiming the differences.
As pointed out in the comments in this answer, Bjarne Stroustrup, the inventor of C++, described STL as
the STL (the "Standard Template Library"; that is, the containers and
algorithm framework of the ISO C++ standard library)
What's more, a core feature of the STL that was introduced into the standard library is the concept that every STL algorithm must have a pre-specified worst case algorithmic complexity, making it an unimportant matter who implements the STL. One only has to pay attention to the specification of a STL container or algorithm, historically hosted on the SGI website among other sources. This was fairly important in the prehistoric times when everybody can come up with their own containers with different computational complexities.
Other important STL features introduced into the standard library include the new paradigm of functional programming as embodied in the present <algorithm>
and everywhere else, which in my opinion, revitalized C++ as a language by complementing the traditional Object Oriented Programming paradigm.
In that sense and back to your question, I think it's only fair to say that the containers like vector
belong to STL
(originally) and the standard library.