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

本文深入解析C++标准库中的string类定义与实现原理,对比cstring并介绍与vector的区别,帮助理解string类在实际编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值