The last sequence container that we will cover is the std::basic_string. The std::string is a typedef for std::basic_string<char>. Historically, std::basic_string was not guaranteed to be laid out contiguously in memory. This has now changed since C++17, which makes it possible to pass the string to APIs that require an array of characters. For example, the following code reads an entire file into a string:
auto in = std::ifstream{"file.txt", std::ios::binary | std::ios::ate}; if (in.is_open()) { auto size = in.tellg(); auto content = std::string(size, '\0'); in.seekg(0); in.read(&content[0], size); // "content" now contains the entire file }
Most implementations of std::basic_string utilize something called small-size ...