In my experience, the STL is very useful and important. Anytime that anyone says that the STL is inefficient, ignore them. Your compiler vendors have most likely spent years with very smart people who know the intricacies of the compiler implementing these things, and its highly unlikely that your lookalike is going to be better (if, in some cases, that is even possible anymore).
The reason that people might say that the STL is inefficient is because the quality of the implementation fluctuates wildly. For example, to do some work with the STL and comparing that same work done in an optimized C-style, the STL could be four times as fast on one implementation and half as fast on another: you never really know.
Another reason might be simply that in some cases hand-writing a container can be more efficient because the you know there are certain conditions that are being kept in place for the data, and you can optimize the container to behave properly in those cases.
I've noticed that the STL is pretty bad for static library/dll applications because their implementation depends on the version of the runtime they have. |
This depends on the compiler. For example, for clang you can link to a specified version of the standard library, while of course changes in version of MSVS will of course create non-binary-compatible objects. However, when is this really a problem? Its not like you can compile some files with one version of a compiler and some other files with a different version and expect linking it to work, regardless of whether or not you use the standard library.
Also, with run time libraries, GCC and Clang normally will have you distributing your program along with the relevant runtime libraries required anyway, and MSVS programs will normally have the required libraries installed anyway, and its not like different people have radically different versions of those libraries.
Basically, don't not use the standard library (double negative!) for mediocre reasons. Efficiency isn't normally an issue, runtime libraries make no difference, and its also often a good idea for code readability since people can understand the standard library, they know how it works, and they don't have to work out how your home-grown implementation works, and how they should go about using it.