January 2018
Intermediate to advanced
374 pages
9h 53m
English
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 ...