# 1. std::allocator

动态内存管理 - 分配器, std::allocator 类模板是所有标准库容器所用的默认分配器 ( Allocator ) ,若不提供用户指定的分配器。默认分配器无状态,即任何给定的 allocator 实例可交换、比较相等,且能解分配同一 allocator 类型的任何其他实例所分配的内存。

在 C++ 中,std::allocator 是一个模板类,用于分配和释放内存。它是标准库中的一部分,并用于动态分配和管理内存块。

std::allocator 模板类的参数是要分配的对象类型。在这种情况下,std::allocator<char> 表示一个用于分配 char 类型对象的分配器。

使用 std::allocator<char> 可以通过其成员函数 allocate () 和 deallocate () 来分配和释放内存

# 2. char_traits

字符类型的性质是由字符特征类(char_traits)定义的。

C++ 的字符串模板实例化类 basic_string 中,还集合了大量的字符串处理函数,与标准容器类似。该类模板的声明如下:

template <class Ch, class Tr = char_traits <Ch>, class A=allocator <Ch>> class std::basic_string
{
    public:
    ...
}

在上述模板声明中,第一个参数(class Ch)是说明单个字符(Ch)所属型别(class)。

第二个参数(class Tr = char_traits <Ch>)是特性类别,用以提供字符串类别中的所有字符核心操作。该特性类别规定了 “复制字符”或“比较字符” 的做法;如果不指定该特性类别,系统会根据现有的字符型别采用默认的特性类别。

第三个参数带有默认值(class A = allocator<Ch>),用以定义字符串类别所采用的内存模式,通常设定为 “默认内存模型 allocator”。该模板及其相关功能都定义在名称空间 std 中,由头文件 <string> 给出,其中包含了两个定义类型,可以为最常用的串类型提供便于使用的名称,即 C++ STL 提供了两个 basic_string<> 实例化版本:

typedef basic_string <char> string;
typedef basic_string <wchar> wstring;

其中,wstring 类是为了便于使用宽字符集,例如 Unicode 或某些欧洲字符集。但所有字符串类型均使用相同接口,其用法和问题是相同的。在本教程中,仍以 string 表示任何字符串型别。

http://c.biancheng.net/view/1439.html

# std::string 类

std::string 类的构造模板

标准模板库(STL)提供了一个 std::string 类,其是 std::basic_string 的一个特化,它是一个容器类,可把字符串当作普通类型来使用,并支持比较、连接、遍历、STL 算法、复制、赋值等等操作,这个类定义在 <string> 头文件中。

c
//a. 
string s(); // 生成一个空字符串 s
//b.
string s(str) // 拷贝构造函数 生成 str 的复制品 string (const string& str)
//c.
 string s(str,stridx) // 将字符串 str 内 "始于位置 stridx" 的部分当作字符串的初值
//d.
string s(const string& str, size_type pos,strlen) // 将字符串 str 内 "始于 pos 且长度顶多 strlen" 的部分作为字符串的初值
//e.
 string s(const char *s) // 将 C 字符串作为 s 的初值
//f.
 string s(const char* cstr, size_type n) // 使用字符串 str 的前 n 个字符初始化作为字符串 s 的初值。
//g.
 string s(int num,char c) // 生成一个字符串,包含 num 个 c 字符
//h.
 string s(beg,end) // 以区间 beg;end (不包含 end) 内的字符作为字符串 s 的初值
//i.
s.~string() // 销毁所有字符,释放内存

https://blog.csdn.net/wuguangbin1230/article/details/76899862