《c++标准程序库》读后感之string 二

一 、string class的定义

头文件 #include

之中,basic_string<.>被定义为所有字符串类型的基本模板类型(basic template class)

namespace std{

template , class Allocator  = allocator >

class basic_string;

}

在模板中,第一个参数是单个字符所属的类型;

第二个参数是个特性类型,提供字符串类型中所有的字符核心操作。这种特性类型规定了“复制字符”或“比较字符”的做法,如果没有指定它,就会根据现有的字符类型采用缺省的类型。

第三个参数带默认值,它定义了字符串类型所采用的内存模式,allocator(配置器)是c++标准程序库在许多地方采用特殊对象来处理内存配置和寻址。

string类型是针对char而预先定义的特化版本

namespace std{

typedef basic_string 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主要把整个容器视为整体,经行处理和操作,因此通常会为“整个容器的复制和传递”进行优化。

你可能感兴趣的:(《c++标准程序库》读后感之string 二)