I don't know if this is too basic or not, but how about making an episode about best practices for parameter passing in C++11?
Like, when do you pass by value, by lvalue reference, by lvalue reference to const, by rvalue reference, by rvalue reference to const, by pointer or by pointer to const? When should you prefer passing iterators instead? Is it a good idea to have iterators as members? Or should they just be used inside a function? How do you pass stuff into members? Should move-only types be passed by rvalue reference or or by value? Should we pass shared pointers by lvalue reference to const, by rvalue reference to const or by value?
What do we do in generic code? How do we decide what the best passing mode for T is? (Doesn't Boost have a meta-function for this?) What's the difference between ConreteType&& and TemplateParameter&&? Related: what does auto&& mean, and when should I use it?
I think it would be really helpful, especially for beginners, if you could dissect these issues in the next episode.
At 35:12, you start talking about move semantics in the context of the flip function taking a string by value, but there are no move semantics involved here. Since the arguments are const char arrays, the string variable s is simply initialized by the constructor string(const char*), as it always has been.
# Now let's consider insertions for the vector in detail. What you do is simply allocating a new chunk of memory with n+1 space and traversing the original vector, copying all elements into the new chunk. All of this costs O(n)
Allocating n+1 space is a common beginner's mistake which would indeed lead to O(n) push_back performance. In reality, the complexity of push_back is "amortized constant time", because the space is not increased by a fixed addend like +1 or +10 but rather by a fixed factor like *1.5 or *2.
I'm a bit surprised STL did not comment on this since. Unless I'm mistaken, this issue is one of his pet peeves