|
Containers |
|
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 |
|
vector and string |
|
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 |
|
Associative Containers |
|
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 | | Prefer map::insert to map::operator[] when efficiency is a concern. | 106 |
|
Item 25 | | Familiarize yourself with the nonstandard hashed containers. | 111 |
|
Iterators |
|
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 |
|
Algorithms |
|
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 | | Use not1 and remove_copy_if to perform a copy_if. | 154 |
|
Item 37 | | Use accumulate or for_each to summarize sequences. | 156 |
|
Functors, Functor Classes, Functions, etc. |
|
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 means operator<. | 177 |
|
Programming with the STL |
|
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 |