STL之string类

为什么要用string类

在C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分割开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会造成越界访问。

之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个泛型类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。

C++中对于strinig的定义为:typedef basic_string string; 也就是说C++中的string类是一个泛型类,由模板而实例化的一个标准类,本质上不是一个标准数据类型。C++中对于strinig的定义为:typedef basic_string string; 也就是说C++中的string类是一个泛型类,由模板而实例化的一个标准类,本质上不是一个标准数据类型。

总结如下:

  1. string是表示字符序列的类
  2. 标准的string提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性
  3. string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型)
  4. string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits和allocator作为basic_string的默认参数

string类的常用接口

1.string类对象的常见构造

函数名称 功能说明
string() 构造空的string类对象,即空字符串
string(const char* s) 用C-string来构造string类对象
string(size_t n,char c) string类对象中包含n个字符c
string(const string& s) 拷贝构造函数
string(const string& s,size_t n) 用s中的前n个字符构造新的string类对象

2.string类对象的容量操作

函数名称 功能说明
size_t size() const 返回字符串有效字符长度
size_t length() const 返回字符串有效字符长度
size_t capacity() const 返回空间总大小
bool empty() const 检测字符串释放为空串,是返回true,否则返回false
void clear() 清空有效字符
void resize(size_t n,char c) 将有效字符的个数改成n个,多出的空间用字符c填充
void resize(size_t n) 将有效字符的个数改成n个,多出的空间用0填充
void reserve(size_t res_arg=0) 为字符串预留空间
  1. size()与length()方法的底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一致,一般情况下基本都是用size()

  2. clear()只是将string中有效字符清空,不改变底层空间大小

  3. resize(size_t n)与resize(size_t n,char c)都是将字符串中有效字符个数改变到n个,不同的是当字符个数增多时,resize(n)用0来填充多出的元素空间,resize(size_t n,char c)用字符c来填充多出的元素空间

    注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是元素个数减少底层空间大小不改变

  4. reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参数小于string的底层空间总大小时,reserver不会改变容量大小

3.string类的访问操作

函数名称 功能说明
char& operator[] (size_t pos) 返回pos位置的字符,const string类对象调用
const char& operator[] (size_t pos) const 返回pos位置的字符,非const string类对象调用

4.string类对象的修改操作

函数名称 功能说明
void push_back(char c) 在字符串后尾插字符c
string& append(const char* s) 在字符串后追加一个字符串
string& operator+=(const string& str) 在字符串后追加字符串str
string& operator+=(const char* s) 在字符串后追加c个数字符串
string& operator+=(char c) 在字符串后追加字符c
string& char* c_str() cosnt 返回C格式字符串
size_t find(char c,size_t pos = 0)const 从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置
size_t rfind(char c,size_t pos=npos) 从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置
string substr(size_t pos=0,size_t n=npos) const 在str中从pos位置开始,截取n个字符,然后将其返回
0%