| |
| |
Preface | |
| |
| |
Acknowledgments | |
| |
| |
Introduction | |
| |
| |
| |
Containers | |
| |
| |
| |
Choose your containers with care | |
| |
| |
| |
Beware the illusion of container-independent code | |
| |
| |
| |
Make copying cheap and correct for objects in containers | |
| |
| |
| |
Call empty instead of checking size() against zero | |
| |
| |
| |
Prefer range member functions to their single-element counterparts | |
| |
| |
| |
Be alert for C++'s most vexing parse | |
| |
| |
| |
When using containers of newed pointers, remember to delete the pointers before the container is destroyed | |
| |
| |
| |
Never create containers of auto_ptrs | |
| |
| |
| |
Choose carefully among erasing options | |
| |
| |
| |
Be aware of allocator conventions and restrictions | |
| |
| |
| |
Understand the legitimate uses of custom allocators | |
| |
| |
| |
Have realistic expectations about the thread safety of STL containers | |
| |
| |
| |
Vector and string | |
| |
| |
| |
Prefer vector and string to dynamically allocated arrays | |
| |
| |
| |
Use reserve to avoid unnecessary reallocations | |
| |
| |
| |
Be aware of variations in string implementations | |
| |
| |
| |
Know how to pass vector and string data to legacy APIs | |
| |
| |
| |
Use "the swap trick" to trim excess capacity | |
| |
| |
| |
Avoid using vector[left angle bracket]bool[right angle bracket] | |
| |
| |
| |
Associative Containers | |
| |
| |
| |
Understand the difference between equality and equivalence | |
| |
| |
| |
Specify comparison types for associative containers of pointers | |
| |
| |
| |
Always have comparison functions return false for equal values | |
| |
| |
| |
Avoid in-place key modification in set and multiset | |
| |
| |
| |
Consider replacing associative containers with sorted vectors | |
| |
| |
| |
Choose carefully between map::operator[] and map::insert when efficiency is important | |
| |
| |
| |
Familiarize yourself with the nonstandard hashed containers | |
| |
| |
| |
Iterators | |
| |
| |
| |
Prefer iterator to const_iterator, reverse_iterator, and const_reverse_iterator | |
| |
| |
| |
Use distance and advance to convert a container's const_iterators to iterators | |
| |
| |
| |
Understand how to use a reverse_iterator's base iterator | |
| |
| |
| |
Consider istreambuf_iterators for character-by-character input | |
| |
| |
| |
Algorithms | |
| |
| |
| |
Make sure destination ranges are big enough | |
| |
| |
| |
Know your sorting options | |
| |
| |
| |
Follow remove-like algorithms by erase if you really want to remove something | |
| |
| |
| |
Be wary of remove-like algorithms on containers of pointers | |
| |
| |
| |
Note which algorithms expect sorted ranges | |
| |
| |
| |
Implement simple case-insensitive string comparisons via mismatch or lexicographical_compare | |
| |
| |
| |
Understand the proper implementation of copy-if | |
| |
| |
| |
Use accumulate or for_each to summarize ranges | |
| |
| |
| |
Functors, Functor Classes, Functions, etc. | |
| |
| |
| |
Design functor classes for pass-by-value | |
| |
| |
| |
Make predicates pure functions | |
| |
| |
| |
Make functor classes adaptable | |
| |
| |
| |
Understand the reasons for ptr_fun, mem_fun, and mem_fun_ref | |
| |
| |
| |
Make sure less[left angle bracket]T[right angle bracket] means operator[left angle bracket] | |
| |
| |
| |
Programming with the STL | |
| |
| |
| |
Prefer algorithm calls to hand-written loops | |
| |
| |
| |
Prefer member functions to algorithms with the same names | |
| |
| |
| |
Distinguish among count, find, binary_search, lower_bound, upper_bound, and equal_range | |
| |
| |
| |
Consider function objects instead of functions as algorithm parameters | |
| |
| |
| |
Avoid producing write-only code | |
| |
| |
| |
Always #include the proper headers | |
| |
| |
| |
Learn to decipher STL-related compiler diagnostics | |
| |
| |
| |
Familiarize yourself with STL-related web sites | |
| |
| |
Bibliography | |
| |
| |
| |
Locales and Case-Insensitive String Comparisons | |
| |
| |
| |
Remarks on Microsoft's STL Platforms | |
| |
| |
Index | |