C++ STL string 类详解
前言
STL 是 C++ 标准库的重要组成部分,也是一个包罗数据结构与算法的软件框架。本文介绍 STL 的六大组件(迭代器、仿函数、算法、空间配置器、容器、配接器)以及学习方法。本文将带大家正式进入 STL 的第一个容器——string 类的学习。
1. 学习 string 类的目的
1.1 C 语言中 str 系列库函数不好用
C 语言中,字符串是以 \0 结尾的一些字符的集合。为了操作方便,C 标准库中提供了一些 str 系列的库函数,但是这些库函数与字符串是分离开的,不太符合 OOP 的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。
1.2 两道面试题
在 OJ 中,有关字符串的题目基本以 string 类的形式出现,而且在常规工作中,为了简单、方便、快捷,基本都使用 string 类,很少有人去使用 C 库中的字符串操作函数。
2. STL 标准库中的 string 类
2.1 简单了解 string 类
在使用 string 类时,必须包含 <string> 头文件以及 using namespace std; 命名空间。
建议养成阅读官方文档的习惯,文档才是原汁原味的资料。
2.2 auto 关键词和范围 for
2.2.1 auto 关键字
- C++11 中,auto 不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto 声明的变量必须由编译器在编译时期推导而得。
- 用 auto 声明指针类型时,用 auto 和 auto* 没有任何区别,但用 auto 声明引用类型时则必须加 &。
- 当在同一行声明多个变量时,这些变量必须是相同的类型。
- auto 不能作为函数的参数,可以做返回值,但建议谨慎使用,过多会降低代码可读性。
- auto 不能直接用来声明数组。
2.2.2 范围 for
C++11 引入了基于范围的 for 循环。for 循环后的括号由冒号':'分为两部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围。范围 for 可以作用到数组和容器对象上进行遍历,底层替换为迭代器,被称为'语法糖'。
3. string 类的常见接口介绍说明
3.1 string 对象的常见构造
| 函数名称 | 功能说明 |
|---|---|
| string() | 构造空的 string 类对象 |
| string(const char* s) | 用 C-string 来构造 string 类对象 |
| string(size_t n, char c) | string 类对象中包含 n 个字符 c |
| string(const string& s) | 拷贝构造函数 |
void TestString() {
string s1; // 构造空的 string 类对象 s1
string ;
;
}


