I lack time right now but I'm interested in trying your container in the
context of implementations (mostly experimental) of components systems.
I don't think annything related to multithreading should be done by such
kind of container. Most high performance usage will be going through all
the elements
to transform them (if "alive") and as long as you provide iterators it
can be done in parallel the user wants.
Yes, the iterators simply 'jump' over the erased element areas. It's very fast.
I am glad for your support, but I'm not sure why you think it shouldn't be used with multithreading - it follows the same rules for multithreading as the std:: containers ie. reads can be synchronous, writes must be serialized.
There are cases where vector is not the right solution but yeah in my
experience too it fits most use cases.
Also: http://bannalia.blogspot.fr/2015/06/cache-friendly-binary-search.html
I remember Stroustrup making the same statement at Going Native
conference too, and it's also common observation in game devs circles
(several other CPPcon talks talked about it too).
Yes, I feel it's a real shame that more developers don't understand these basic principles. In fact, one of the reviewers for the cppcon talk felt I didn't understand the "performance guarantees" of std:: containers - which is ironic, as what he means is "complexity guarantees", which in no way relate to performance, because of the aforementioned problem of cache saturation.