C++ Standard Template Library Tips

Posted by admin on March 7, 2008 under Programming | Comments are off for this article

Effective STL – C++ Standard Template Library Tips


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

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.
– Prefer map::insert to map::operator[] when efficiency is a concern
– 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 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.
– Use not1 and remove_copy_if to perform a copy_if.
– Use accumulate or for_each to summarize sequences.


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 means operator<.

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

Comments are closed.