Home >
Real-time Mantra > Object Oriented Design
> STL Tutorial AdvancedC++ 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
-
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++0x) 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
allocated memory
- 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.
- Partitioning algorithm
- Changed from bidirectional iterators to forward direction iterator
in C++0x
- STL uses a faster algorithm when a forward direction iterator is
passed
- 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
- 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)
- /dlreportSingleClassLayout<ClassName>
- You may skip this video if you do not use Visual Studio for your C++
development
- An
introduction to Rvalue references is a prerequisite to this video.
- Rvalue references enable support move semantics and perfect forwarding
- With C++0x, adding a move constructor and a move assignment operator for
classes will speed up STL execution as the compiler can use move semantics
for temporaries.
- C++0x 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.
- 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
- 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.
|