标准库中的 string 类
C 语言中,字符串是以 \0 结尾的字符集合。虽然 C 标准库提供了一些 str 系列函数,但它们与字符串对象分离,不符合 OOP 思想,且底层空间需手动管理,容易越界。在现代 C++ 开发及 OJ 题目中,为了简单、安全、高效,基本都使用 std::string。
使用前必须包含头文件并引入命名空间:
#include <string>
using namespace std;
构造方法
string 主要有 5 种构造方式:
string():无参构造,初始化为空串。string(const string& str):拷贝构造。string(size_t n, char c):用 n 个字符 c 初始化。string(const char* s, size_t n):用字符串 s 的前 n 个字符初始化。string(const string& str, size_t pos, size_t len=npos):从下标 pos 开始,选取长度为 len 的字符初始化。
注:缺省值 npos 定义为 size_t npos = -1,表示最大值。若不传参数,则取 pos 位置后的所有字符。
string 的遍历
auto 和范围 for(C++11)
早期 C/C++ 中 auto 指自动存储类型,但在 C++11 后,它变成了类型指示符,让编译器在编译期推导变量类型。这大大简化了容器遍历的代码。
注意:
- 声明指针时
auto和auto*无区别,但声明引用时必须加&。 - 同一行声明多个变量必须是相同类型。
auto不能作为函数参数,建议谨慎用于返回值,也不能直接声明数组。
基于范围的 for 循环(Range-based for loop)进一步简化了遍历逻辑。括号由冒号分为两部分:迭代变量和被迭代范围。它能自动处理边界判断,适用于数组和容器。
迭代器 (iterator)
string 的迭代器分为正向和反向,每种又分 const 和非 const 类型。const 迭代器在循环内不可修改元素。
| 方法组合 | 说明 |
|---|---|
begin() + end() | 获取首字符迭代器和尾字符下一个位置的迭代器 (\0) |
rbegin() + rend() | 获取反向迭代器,分别指向最后一个字符和前一个位置 |
此外,直接使用 operator[] 通过索引访问字符数据也是常见方式。
string 容量
length 和 size
两者返回有效字符长度,底层实现完全一致。引入 size() 是为了与其他容器接口保持一致,实际使用中通常推荐 size()。


