Skip Navigation
List Price: $110.49

Rent Textbook

Select for Price
Add to Cart Free Shipping
There was a problem. Please try again later.

New Textbook

We're Sorry
Sold Out

Used Textbook

We're Sorry
Sold Out

Effective STL 50 Specific Ways to Improve Your Use of the Standard Template Library,9780201749625

Effective STL 50 Specific Ways to Improve Your Use of the Standard Template Library

by
Edition: 1st
Format: Paperback
Pub. Date: 6/6/2001
Publisher(s): Addison-Wesley Professional
Availability: This title is currently not available.

Summary

"This is Effective C++ volume three - it's really that good." - Herb Sutter, independent consultant and secretary of the ISO/ANSI C++ standards committee"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 JournalC++'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. Highlights of Effective STL include: bull;Advice on choosing among standard STL containers (like vector and list), nonstandard STL containers (like hash_set and hash_map), and non-STL containers (like bitset). bull;Techniques to maximize the efficiency of the STL and the programs that use it. bull;Insights into the behavior of iterators, function objects, and allocators, including things you should not do. bull;Guidance for the proper use of algorithms and member functions whose names are the same (e.g., find), but whose actions differ in subtle (but important) ways. bull;Discussions of potential portability problems, including straightforward ways to avoid them. Like Meyers' previous books, Effective STL is filled with proven wisdom that comes only from experience. Its clear, concise, penetrating style makes it an essential resource for every STL programmer.

Author Biography

Scott Meyers is one of the world's foremost authorities on C++, providing training and consulting services to clients worldwide. He is the author of the best-selling Effective C++ series of books (Effective C++, More Effective C++, and Effective STL) and of the innovative Effective C++ CD. He is consulting editor for Addison Wesley's Effective Software Development Series and serves on the Advisory Board for The C++ Source (http://www.artima.com/cppsource). He holds a Ph.D. in Computer Science from Brown University. His web site is http://www.aristeia.com.



Table of Contents

Preface xi
Acknowledgments xv
Introduction 1(10)
Containers
11(52)
Choose your containers with care
11(4)
Beware the illusion of contaier-independent code
15(5)
Make copying cheap and correct for objects in containers
20(3)
Call empty instead of checking size() against zero
23(1)
Prefer range member functions to their single-element counterparts
24(9)
Be alert for C++'s most vexing parse
33(3)
When using containers of newed pointers, remember to delete the pointers before the container is destroyed
36(4)
Never create containers of auto_ptrs
40(3)
Choose carefully among erasing options
43(5)
Be aware of allocator conventions and restrictions
48(6)
Understand the legitimate uses of custom allocators
54(4)
Have realistic expectations about the thread safety of STL containers
58(5)
vector and string
63(20)
Prefer vector and string to dynamically allocated arrays
63(3)
Use reserve to avoid unnecessary reallocations
66(2)
Be aware of variations in string implementations
68(6)
Know how to pass vector and string data to legacy APIs
74(3)
Use ``the swap trick'' to trim excess capacity
77(2)
Avoid using vector⟨bool⟩
79(4)
Associative Containers
83(33)
Understand the difference between equality and equivalence
83(5)
Specify comparison types for associative containers of pointers
88(4)
Always have comparison functions return false for equal values
92(3)
Avoid in-place key modification in set and multiset
95(5)
Consider replacing associative containers with sorted vectors
100(6)
Choose carefully between map::operator[] and map::insert when efficiency is important
106(5)
Familiarize yourself with the nonstandard hashed containers
111(5)
Iterators
116(12)
Prefer iterator to const_iterator, reverse_iterator, and const_reverse_iterator
116(4)
Use distance and advance to convert a container's const_iterators to iterators
120(3)
Understand how to use a reverse_iterator's base iterator
123(3)
Consider istreambuf_iterators for character-by-character input
126(2)
Algorithms
128(34)
Make sure destination ranges are big enough
129(4)
Know your sorting options
133(6)
Follow remove-like algorithms by erase if you really want to remove something
139(4)
Be wary of remove-like algorithms on containers of pointers
143(3)
Note which algorithms expect sorted ranges
146(4)
Implement simple case-insensitive string comparisons via mismatch or lexicographical_compare
150(4)
Understand the proper implementation of copy_if
154(2)
Use accumulate or for_each to summarize ranges
156(6)
Functors, Functor Classes, Functions, etc
162(19)
Design functor classes for pass-by-value
162(4)
Make predicates pure functions
166(3)
Make functor classes adaptable
169(4)
Understand the reasons for ptr_fun, mem_fun, and mem_fun_ref
173(4)
Make sure less⟨T⟩ means operator⟨
177(4)
Programming with the STL
181(44)
Prefer algorithm calls to hand-written loops
181(9)
Prefer member functions to algorithms with the same names
190(2)
Distinguish among count, find, binary_search, lower_bound, upper_bound, and equal_range
192(9)
Consider function objects instead of functions as algorithm parameters
201(5)
Avoid producing write-only code
206(3)
Always #include the proper headers
209(1)
Learn to decipher STL-related compiler diagnostics
210(7)
Familiarize yourself with STL-related web sites
217(8)
Bibliography 225(4)
Appendix A: Locales and Case-Insensitive String Comparisons 229(10)
Appendix B: Remarks on Microsoft's STL Platforms 239(6)
Index 245

Excerpts

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 ofMore Effective C++with a brief STL overview. I should have known better. Shortly thereafter, I began receiving mail asking when I'd writeEffective 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 tousingthe 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 waspossibleto 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 myEffective C++has been successful by being grounded in the problems faced by real programmers, it's my hope thatEffective STLsimilarly addresses the practical aspects of STL programming the aspects most important to professional developers. I am always on the lookout for

An electronic version of this book is available through VitalSource.

This book is viewable on PC, Mac, iPhone, iPad, iPod Touch, and most smartphones.

By purchasing, you will be able to view this book online, as well as download it, for the chosen number of days.

A downloadable version of this book is available through the eCampus Reader or compatible Adobe readers.

Applications are available on iOS, Android, PC, Mac, and Windows Mobile platforms.

Please view the compatibility matrix prior to purchase.

Visa
Mastercard
American Express
Comodo
McAfee