C++ Standard Template Library - Advanced Topics
Microsoft's Stephan T. Lavavej (STL) takes you through advanced topics of the Standard Template Library (also STL). The 10 part introduction to STL series is a prerequisite for these videos.
- shared_ptr internals
- Template Meta Programming
- STL Validation in Debug Mode
- More about Rvalue References
- An Introduction to Boost Libraries
- Generic Pretty Printer for STL Containers
Advanced STL 1: shared_ptr internals
- Introduction to shared_ptr and unique_ptr video is a prerequisite
- shared_ptr can work in two modes:
- Explicit new is called and the pointer is saved into a shared_ptr
- make_shared (C++11) is used to construct the object.
- make_shared should be the preferred approach as a single buffer is used
to store the shared_ptr's internal housekeeping as well as the user
- The explicit new approach requires allocation of two buffers; one for internal housekeeping and second one for user allocated memory
- shared_ptr internally reference counts the pointers to the allocated memory. Memory is freed when the reference counter drops to 0
- weak_ptr and shared_ptr interplay is also discussed.
Advanced STL 2: Template Meta Programming
- Partitioning algorithm
- Changed from bidirectional iterators to forward direction iterator in C++11
- STL uses a faster algorithm when a forward direction iterator is
- This is accomplished with template meta programming.
- The algorithm selection is done at compile time, not runtime.
- Optimizing algorithms for specific user types
- For example, memcmp can be used to compare containers if the STL container contained integer
- Again, the memcmp selection is done at compile time
Advanced STL 3: STL Validation in Debug Mode
- This tutorial describes the debug checks that are added in the debug mode build in Visual Studio.
- Iterator debugging support in Visual Studio is covered.
- An undocumented compiler switch for analyzing the class layout is
described towards the end of the video (about 5:00 minutes from the end)
- You may skip this video if you do not use Visual Studio for your C++ development
Advanced STL 4: More about Rvalue References
- An introduction to Rvalue references is a prerequisite to this video.
- Rvalue references enable support move semantics and perfect forwarding
- With C++11, adding a move constructor and a move assignment operator for
classes will speed up STL execution as the compiler can use move semantics
- C++11 adds push_back method that takes Rvalue reference as an input. The compiler will use this method when it knows for sure that the object being passed is a temporary
- Normally, LValue references cannot bind to RValue references
- There is special handling for temporaries created from conversion. A temporary created from a Lvalue reference can bind to a Rvalue reference.
Advanced STL 5: An Introduction to Boost Libraries
- Installing and navigating through Boost
- A bimap is a data structure that represents bidirectional relations between elements of two collections.
- Boost file system is described with an example
- Recursive directory Iterator is used for manipulating files in a directory
- Directory iterators can be passed to STL algorithms
- Portable way of dealing with files
Advanced STL 6: Generic Pretty Printer for STL Containers
- A pretty printer for STL containers is built using template meta programming techniques.
- Vectors, sets, maps and tuples are supported.
- Nested lists can be easily printed.
- Learn how to write code that will target pretty printing of specific data structures.
- Jump to 40:40 if you just want to see how to use the pretty printer.
- pretty_printer.cpp can be downloaded from here.