“There are very few books which all C++ programmers must have. Add Effective STL to that list.”– Thomas Becker, Senior Software Engineer, Zephyr Associates, Inc., and columnist, C/C++ Users Journal

C++’s Standard Template Library is revolutionary, but learning to use it well has always been a challenge. Until now. In this book, best-selling author Scott Meyers (Effective C++, and More Effective C++) reveals the critical rules of thumb employed by the experts – the things they almost always do or almost always avoid doing – to get the most out of the library.

Other books describe what’s in the STL. Effective STL shows you how to use it. Each of the book’s 50 guidelines is backed by Meyers’ legendary analysis and incisive examples, so you’ll learn not only what to do, but also when to do it – and why.

Bibliography 225

Appendix A: Locales and Case-Insensitive String Comparisons 229

Appendix B: Remarks on Microsoft’s STL Platforms 239

Index 245

Preface

Untitled Document

It came without ribbons!
It came without tags! It came without packages, boxes or bags!
 Dr. Seuss, How the Grinch Stole Christmas!, Random House, 1957

I first wrote about the Standard Template Library in 1995, when I concluded
the final Item of More Effective C++ with a brief STL overview. I should
have known better. Shortly thereafter, I began receiving mail asking when I'd
write Effective STL.

I resisted the idea for several years. At first, I wasn't familiar enough with
the STL to offer advice on it, but as time went on and my experience with it
grew, this concern gave way to other reservations. There was never any question
that the library represented a breakthrough in efficient and extensible design,
but when it came to using the STL, there were practical problems I couldn't
overlook. Porting all but the simplest STL programs was a challenge, not only
because library implementations varied, but also because template support in
the underlying compilers ranged from good to awful. STL tutorials were hard
to come by, so learning the STL way of programming was difficult,
and once that hurdle was overcome, finding comprehensible and accurate reference
documentation was equally difficult. Perhaps most daunting, even the smallest
STL usage error often led to a blizzard of compiler diagnostics, each thousands
of characters long, most referring to classes, functions, or templates not mentioned
in the offending source code, almost all incomprehensible. Though I had great
admiration for the STL and for the people behind it, I felt uncomfortable recommending
it to practicing programmers. I wasn't sure it was possible to use the
STL effectively.

Then I began to notice something that took me by surprise. Despite the portability
problems, despite the dismal documentation, despite the compiler diagnostics
resembling transmission line noise, many of my consulting clients were using
the STL anyway. Furthermore, they weren't just playing with it, they were using
it in production code! That was a revelation. I knew that the STL featured an
elegant design, but any library where programmers are willing to endure portability
headaches, poor documentation, and incomprehensible error messages has a lot
more going for it than just good design. For an increasingly large number of
professional programmers, I realized, even a bad implementation of the STL was
preferable to no implementation at all.

Furthermore, I knew that the situation regarding the STL would only get better.
Libraries and compilers would grow more conformant with the Standard (they have),
better documentation would become available (it has  check out the bibliography
beginning on page 225), and compiler diagnostics would improve (for the most
part, we're still waiting, but Item 49 offers suggestions for how to cope while
we wait). I therefore decided to chip in and do my part for the burgeoning STL
movement, and this book is the result: 50 specific ways to improve your use
of C++'s Standard Template Library.

My original plan was to write the book in the second half of 1999, and with
that thought in mind, I put together an outline. But then I paused and changed
course. I suspended work on the book, and I developed an introductory training
course on the STL, which I then taught several times to different groups of
programmers. About a year later, I returned to the book, significantly revising
the outline based on my experiences with the training course. In the same way
that my Effective C++ has been successful by being grounded in the problems
faced by real programmers, it's my hope that Effective STL similarly
addresses the practical aspects of STL programming  the aspects most important
to professional developers.

I am always on the lookout for ways to improve my understanding of C++. If
you have suggestions for new guidelines for STL programming or if you have comments
on the guidelines in this book, please let me know. In addition, it is my continuing
goal to make this book as accurate as possible, so for each error in this book
that is reported to me  be it technical, grammatical, typographical, or
otherwise  I will, in future printings, gladly add to the acknowledgments
the name of the first person to bring that error to my attention. Send your
suggested guidelines, your comments, and your criticisms to estl@aristeia.com.

If you'd like to be notified when I make changes to this book, I encourage
you to join my mailing list. I use the list to make announcements likely to
be of interest to people who follow my work on C++. For details, consult http://www.aristeia.com/MailingList/.