一 、string class的定义
头文件 #include<string>
在<string>之中,basic_string<.>被定义为所有字符串类型的基本模板类型(basic template class)
namespace std{
template<class charT , class traits = char_traits<charT> , class Allocator = allocator<charT> >
class basic_string;
}
在模板中,第一个参数是单个字符所属的类型;
第二个参数是个特性类型,提供字符串类型中所有的字符核心操作。这种特性类型规定了“复制字符”或“比较字符”的做法,如果没有指定它,就会根据现有的字符类型采用缺省的类型。
第三个参数带默认值,它定义了字符串类型所采用的内存模式,allocator(配置器)是c++标准程序库在许多地方采用特殊对象来处理内存配置和寻址。
string类型是针对char而预先定义的特化版本
namespace std{
typedef basic_string<char> string;
}
还有针对wchar_t而预先定义的特化版本,这里就不详细介绍了。
二、string class 与 cstring
在c++ 标准中,为了提供向下兼容,存在一个从const char* 到string的隐式类型转换,但是不存在从string object 到 cstring的自动类型转化,但是提供了几种方式可以将string类型转为char*数据。
三个函数:
1、data()以字符数组的形式返回字符串内容。由于并没有追加‘\0’字符,所以返回类型并非有效的cstring。
2、c_str() 以cstring形式返回字符串内容,也就是在尾端添加'\0'字符。
3、copy()将字符串内容复制到“调用者提供的字符数组”中。不添加‘\0’字符。
三、string 与 vector
string和vector很相似的,他们都可以看成一种动态数组。可以把string视为一种“以字符作为元素”的特定vectors。但是由于string和vector之间有许多本质上的不同。
一、vector首要目标是处理和操作容器内的元素,而非容器的整体,因此通常会为“容器内的元素的操作行为”经行优化。
二、string主要把整个容器视为整体,经行处理和操作,因此通常会为“整个容器的复制和传递”进行优化。