Skip to content

WillBrennan/learn_stl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

89 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Learn STL

Learning about the C++ Standard Library by Implementation

Ever wondered how std::tuple is implemented? How std::get works? Well I started implementing this to find out just that.

The standard library heavily relies on many C++ Idioms and unusual language features, by implementing the library you can get a bit more familiar with them!

Each of the components have documentation in /docs explaining how they work, what idioms the use, and whats interesting about them.

Hopefully you'll find this an interesting read!

Feel free to submit a PR adding more components or improving library / documentation!

Vocab Types

Any is the de-facto type-erasure method in C++, it provides type-safe container for single values of any type. The implementation provides an introduction to polymorphism in C++.

How can you store an object without a default-constructor on the stack? Well with a union is how, but what is this weird special type.

Tuple heavily depends on variadic templates and std::index_sequence, and isn't obvious how its implemented. It's a refreshing look at features which aren't used day-to-day.

Another component thats heavily dependent on variadic templates, it employs more template metaprogramming tricks than tuple. It also provides an interesting use case of aligned_storage.

Containers

Array is deceptively simple, but how are its constructors and destructors implicity declared? Why is array constexpr but vector isn't, and what is aggregate-initialization? Understanding Array requires a strong comprehension of these often over-looked language features.

Everyone knows std::vector right? But why is reserving so important? And what is std::allocator and why wrap it in std::allocator_traits?

valarray provides an introduction to expression-templates. It stores elements in a vector, and it provides element-wise unary and binary operations. It won't create any temporaries and will only perform one iteration as it evaluates the expression for each resultant element.

Memory Mangement

unique_ptr is pretty simple, but its always good to understand what std::default_deleter does and how dangerous aggregate initialisation can be

addressof might seem like a verbose way of calling &T; but why does it exist? And why is it constexpr in C++17 and what does a constexpr pointer mean?

allocator is relatively simple, but why does it define is_always_equal and propagate_on_container_move_assignment.

About

Learning how the C++ Standard Library works; by implementation

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Packages

No packages published
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy