C++ as a high-level language?
Congratulations, you have discovered what we call "Modern C++". I'd prefer it anyday over "C with classes" styles of programming. No more raw pointers, no more explicit deletes etc. Wonderful world!
Generic typing and template metaprogramming all the way. I don't use polymorphism that much since it's too much lock-in.
And by the way, the Boost libraries are a tremendous complement to STL.
So, what C++ do YOU use in you practice? Do you mix the styles, say, arrays and vectors? Are there any rules or best practices here?...
Modern C++, definitely. But in my opinion, that doesn't exactly rule out arrays. There are still cases where arrays are preferable to vectors. But when I do use arrays, I use them in an STL-kind of way. I use pointers as iterators, and I apply STL algorithms to the contents of the array, and so on.
By the way, Bjarne Stroustrup himself has been quoted for describing C++ in a very similar way to what described yourself:
Within C++, there is a much smaller and cleaner language struggling to get out
Of course, there are limitations. With modern C++, compile times tend to suffer. And it requires much more advanced compilers, which on some platforms makes it a no-go. And a lot of more conservative lead developers or project managers, or just ancient code bases sometimes mean that it is not an option either. And there is a certain learning curve, because all the pitfalls of C are still there, you just have to learn to step around them (for example, memory leaks don't just vanish, modern C++ just defines some very powerful patterns to avoid them).
But I think modern C++ can really be considered a beautiful language. And that's definitely not how you'd describe traditional "C-with-classes" style C++.
When I work in (other) high-level languages, I've found that there's nearly always something I miss from C++. Either the language misses the robust and type-safe containers or the expressive iterators/algorithms, or it lacks support for RAII, or it has no way to express generic algorithms, as you can with templates.
Those languages definitely have their advantages too, and there are indisputably areas where they are just plain better than C++. But I usually also find that they have clear shortcomings, where I just can't express my ideas as well as I can in C++. I have to jump through hoops, sacrifice type safety, rely on reflection or whatever else, just in order to do something that C++ would have supported "naturally".