Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library (Addison-Wesley Professional Computing Series)

Paperback (Print)
Used and New from Other Sellers
Used and New from Other Sellers
from $24.95
Usually ships in 1-2 business days
(Save 50%)
Other sellers (Paperback)
  • All (15) from $24.95   
  • New (11) from $28.60   
  • Used (4) from $24.95   

Overview

“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 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.

Highlights of Effective STL include:

  • 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).
  • Techniques to maximize the efficiency of the STL and the programs that use it.
  • Insights into the behavior of iterators, function objects, and allocators, including things you should not do.
  • 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.
  • 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.

Read More Show Less

Editorial Reviews

From Barnes & Noble
The Barnes & Noble Review
It's hard to overestimate the importance of the Standard Template Library: the STL can simplify life for any C++ programmer who knows how to use it well. Ay, there's the rub. Even C++ programmers who routinely use the STL often find themselves encountering memory leaks, erratic behavior, and other annoyances.

What's needed is a book like Scott Meyers's legendary Effective C++: one that brings together the best techniques for writing code that works smoothly, quickly, and portably. Meyers has obliged. The 50 techniques in Effective STL get you "in the flow" of STL programming, making it easier to accomplish more, stay out of trouble, and even have more fun.

Meyers starts with guidelines that apply to all STL containers; then offers specific advice for specific container types. There's a chapter on vector and string, fine replacements for most dynamically allocated arrays, but ones with their own responsibilities. Meyers offers cogent ideas for dealing with iterators, algorithms, functors, and functor classes. He concludes with several invaluable "top-level" tips that help you use the right STL tool for every task, even when several are available. If you've been stumbling around in the dim light with STL, here's your halogen flashlight. (Bill Camarda)

Bill Camarda is a consultant, writer, and web/multimedia content developer with nearly 20 years' experience in helping technology companies deploy and market advanced software, computing, and networking products and services. His 15 books include Special Edition Using Word 2000 and Upgrading & Fixing Networks For Dummies®, Second Edition.

Booknews
Explains how to combine STL components to take advantage of the library's design, describes common STL errors and how to avoid them, and discusses ways to optimize code. Guidelines give advice on choosing among standard STL containers, discuss portability problems, explain the proper use of algorithms and member functions whose names are the same but whose actions differ, and gives insight into the behavior of iterators, function objects, and allocators. Appendices discuss locales and case-insensitive string comparisons, and Microsoft's STL platforms. For STL programmers. Meyers has written several books on C++. Annotation c. Book News, Inc., Portland, OR (booknews.com)
Read More Show Less

Product Details

  • ISBN-13: 9780201749625
  • Publisher: Addison-Wesley
  • Publication date: 6/28/2001
  • Series: Addison-Wesley Professional Computing Series
  • Edition description: New Edition
  • Pages: 288
  • Sales rank: 680,283
  • Product dimensions: 7.01 (w) x 9.21 (h) x 0.72 (d)

Meet the Author

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.

Read More Show Less

Read an Excerpt

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 practicingprogrammers. 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.

I maintain a list of changes to this book since its first printing, including bug-fixes, clarifications, and technical updates. The list is available at the Effective STL Errata web site, http://www.aristeia.com/BookErrata/estl1e-errata.html.

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/.

Scott Douglas Meyers
Stafford, Oregon
April 2001

http://aristeia.com/

Read More Show Less

Table of Contents

Preface xi

Acknowledgments xv

Introduction 1

Chapter 1: Containers 11

Item 1: Choose your containers with care. 11

Item 2: Beware the illusion of container-independent code. 15

Item 3: Make copying cheap and correct for objects in containers. 20

Item 4: Call empty instead of checking size() against zero. 23

Item 5: Prefer range member functions to their single-element counterparts. 24

Item 6: Be alert for C++’s most vexing parse. 33

Item 7: When using containers of newed pointers, remember to delete the pointers before the container is destroyed. 36

Item 8: Never create containers of auto_ptrs. 40

Item 9: Choose carefully among erasing options. 43

Item 10: Be aware of allocator conventions and restrictions. 48

Item 11: Understand the legitimate uses of custom allocators. 54

Item 12: Have realistic expectations about the thread safety of STL containers. 58

Chapter 2: vector and string 63

Item 13: Prefer vector and string to dynamically allocated arrays. 63

Item 14: Use reserve to avoid unnecessary reallocations. 66

Item 15: Be aware of variations in string implementations. 68

Item 16: Know how to pass vector and string data to legacy APIs. 74

Item 17: Use “the swap trick” to trim excess capacity. 77

Item 18: Avoid using vector<bool>. 79

Chapter 3: Associative Containers 83

Item 19: Understand the difference between equality and equivalence. 83

Item 20: Specify comparison types for associative containers of pointers. 88

Item 21: Always have comparison functions return false for equal values. 92

Item 22: Avoid in-place key modification in set and multiset. 95

Item 23: Consider replacing associative containers with sorted vectors. 100

Item 24: Choose carefully between map::operator[] and map::insert when efficiency is important. 106

Item 25: Familiarize yourself with the nonstandard hashed containers. 111

Chapter 4: Iterators 116

Item 26: Prefer iterator to const_iterator, reverse_iterator, and const_reverse_iterator. 116

Item 27: Use distance and advance to convert const_iterators to iterators. 120

Item 28: Understand how to use a reverse_iterator’s base iterator. 123

Item 29: Consider istreambuf_iterators for character by character input. 126

Chapter 5: Algorithms 128

Item 30: Make sure destination ranges are big enough. 129

Item 31: Know your sorting options. 133

Item 32: Follow remove-like algorithms by erase if you really want to remove something. 139

Item 33: Be wary of remove-like algorithms on containers of pointers. 143

Item 34: Note which algorithms expect sorted ranges. 146

Item 35: Implement simple case-insensitive string comparisons via mismatch or lexicographical_compare. 150

Item 36: Understand the proper implementation of copy_if. 154

Item 37: Use accumulate or for_each to summarize ranges. 156

Chapter 6: Functors, Functor Classes, Functions, etc. 162

Item 38: Design functor classes for pass-by-value. 162

Item 39: Make predicates pure functions. 166

Item 40: Make functor classes adaptable. 169

Item 41: Understand the reasons for ptr_fun, mem_fun, and mem_fun_ref. 173

Item 42: Make sure less<T> means operator<. 177

Chapter 7: Programming with the STL 181

Item 43: Prefer algorithm calls to hand-written loops. 181

Item 44: Prefer member functions to algorithms with the same names. 190

Item 45: Distinguish among count, find, binary_search, lower_bound, upper_bound, and equal_range. 192

Item 46: Consider function objects instead of functions as algorithm parameters. 201

Item 47: Avoid producing write-only code. 206

Item 48: Always #include the proper headers. 209

Item 49: Learn to decipher STL-related compiler diagnostics. 210

Item 50: Familiarize yourself with STL-related web sites. 217

Bibliography 225

Appendix A: Locales and Case-Insensitive String Comparisons 229

Appendix B: Remarks on Microsoft’s STL Platforms 239

Index 245

Read More Show Less

Preface

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.

I maintain a list of changes to this book since its first printing, including bug-fixes, clarifications, and technical updates. The list is available at the Effective STL Errata web site, http://www.aristeia.com/BookErrata/estl1e-errata.html.

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/.

Scott Douglas Meyers
Stafford, Oregon
April 2001

http://aristeia.com/

0201749629P09192005

Read More Show Less

Customer Reviews

Be the first to write a review
( 0 )
Rating Distribution

5 Star

(0)

4 Star

(0)

3 Star

(0)

2 Star

(0)

1 Star

(0)

Your Rating:

Your Name: Create a Pen Name or

Barnes & Noble.com Review Rules

Our reader reviews allow you to share your comments on titles you liked, or didn't, with others. By submitting an online review, you are representing to Barnes & Noble.com that all information contained in your review is original and accurate in all respects, and that the submission of such content by you and the posting of such content by Barnes & Noble.com does not and will not violate the rights of any third party. Please follow the rules below to help ensure that your review can be posted.

Reviews by Our Customers Under the Age of 13

We highly value and respect everyone's opinion concerning the titles we offer. However, we cannot allow persons under the age of 13 to have accounts at BN.com or to post customer reviews. Please see our Terms of Use for more details.

What to exclude from your review:

Please do not write about reviews, commentary, or information posted on the product page. If you see any errors in the information on the product page, please send us an email.

Reviews should not contain any of the following:

  • - HTML tags, profanity, obscenities, vulgarities, or comments that defame anyone
  • - Time-sensitive information such as tour dates, signings, lectures, etc.
  • - Single-word reviews. Other people will read your review to discover why you liked or didn't like the title. Be descriptive.
  • - Comments focusing on the author or that may ruin the ending for others
  • - Phone numbers, addresses, URLs
  • - Pricing and availability information or alternative ordering information
  • - Advertisements or commercial solicitation

Reminder:

  • - By submitting a review, you grant to Barnes & Noble.com and its sublicensees the royalty-free, perpetual, irrevocable right and license to use the review in accordance with the Barnes & Noble.com Terms of Use.
  • - Barnes & Noble.com reserves the right not to post any review -- particularly those that do not follow the terms and conditions of these Rules. Barnes & Noble.com also reserves the right to remove any review at any time without notice.
  • - See Terms of Use for other conditions and disclaimers.
Search for Products You'd Like to Recommend

Recommend other products that relate to your review. Just search for them below and share!

Create a Pen Name

Your Pen Name is your unique identity on BN.com. It will appear on the reviews you write and other website activities. Your Pen Name cannot be edited, changed or deleted once submitted.

 
Your Pen Name can be any combination of alphanumeric characters (plus - and _), and must be at least two characters long.

Continue Anonymously
Sort by: Showing all of 4 Customer Reviews
  • Anonymous

    Posted December 23, 2002

    More Brain Teaser than Tutorial

    God bless Scott Meyers and this is (probably) a good book. But it doesn't fit into the same educational niche as his books on effective C++. I read "Effective C++: 50..." WHEN I was learning C++, and it made sense and it enhanced the learning experience. It left me with the impression that I could master C++. I read "Effective C++: 35..." after I learned C++ and was left with the impression that C++ could always find a way to misbehave unless I was very careful. Well, I thought that I knew a little bit about STL and that this new effort from Scott Meyers would improve my knowledge. Wrong! Meyers thoughtfully ranked the articles by difficulty. I could not muddle through the easiest of them. OK, so I learned that I don't know STL and need to do some stretching. Given Meyers' previous efforts, this has to be a good book. It's just not as accessible. This is not a beginner's book. I knocked off one star because this book is less than I expected it to be.

    Was this review helpful? Yes  No   Report this review
  • Anonymous

    Posted August 29, 2001

    Excellent - Scott Meyers at his best

    I recommend this book to anyone getting even close to touching the STL and its enormous features. Meyers writes clearly and explicitly, addressing potential problems and pitfalls common to the STL and even the C++ language. Absolutely a mandatory book for every C++ programmer!

    Was this review helpful? Yes  No   Report this review
  • Anonymous

    Posted November 8, 2008

    No text was provided for this review.

  • Anonymous

    Posted August 17, 2009

    No text was provided for this review.

Sort by: Showing all of 4 Customer Reviews

If you find inappropriate content, please report it to Barnes & Noble
Why is this product inappropriate?
Comments (optional)