What is the fundamental difference, if any, between a C++ std::vector and std::basic_string?
A vector is a data structure which simulates an array. Deep inside it is actually a (dynamic) Array.
The basic_string class represents a Sequence of characters. It contains all the usual operations of a Sequence, and, additionally, it contains standard string operations such as search and concatenation.
You can use vector to keep whatever data type you want std::vector but a basic_string can only be used for representing "text".