In the case of C++ I'd put something like: you can use free or costly abstractions, and OOP in general has a preference towards costly ones.
Also vector is a weird point to make, it's been some time I had to deal with Java (luckily) but arrays there are also linear AFAIK. And there are GCs that have a bump allocator for new objects (not sure if Java fits here), so cache would benefit more than in sparse malloc allocations in C/C++.