В чем заключаются различия между этими директивами? Я пропустил какие-либо другие, которые должны считаться частью этой группы?
Ответ 1
<string> где std::string определено.
<xstring> - это заголовок Microsoft С++, содержащий фактическую реализацию шаблона std::basic_string. Вам не нужно включать <xstring> самостоятельно. <string> включает его для реализации basic_string.
<cstring> - стандартная библиотека строк C (strcpy, strcat и т.д.), помещенная в пространство имен С++ std.
wstring не является файлом заголовка, о котором я знаю. std::wstring является wchar_t версией std::string и определяется при включении <string>.
Ответ 2
Только <cstring> и <string> являются стандартными заголовками. <xstring> - нестандартный заголовок.
#include <cstring>
Это <string.h>, но с объявлениями, помещенными в пространство имен std. Это "С++ версия" заголовка C.
#include <string>
Здесь определяется std::string. Он не имеет ничего общего с заголовком C.