⌨ 知识库 C++ string 类详解总结 这篇笔记暂无摘要。 分类 C++ 难度 基础 阅读 2 分钟 浏览 14 更新 2026-7-16 9:35:33 🌐 所有人可见 登录后记录进度 导出 MD 复制链接 打印 / PDF #### 一、C与C++字符串对比 1. **C语言字符串** • 使用字符数组表示,以`'\0'`结尾。 • 需手动管理内存,操作依赖库函数(如`strcpy`、`strcat`)。 • 固定大小,灵活性差。 2. **C++字符串(**`std::string`**)** • 类封装,自动管理内存,动态调整大小。 • 提供丰富成员函数(如`append`、`substr`),操作简便。 • 支持运算符重载(如`+=`、`==`)。 #### 二、string类核心特性 1. **构造与析构** • **构造函数**:支持空字符串、C风格字符串、子串、重复字符等多种初始化方式。 ```cpp std::string s1; // 空字符串 std::string s2("Hello"); // C风格字符串 std::string s3(5, 'a'); // 5个'a' std::string s4(s2, 1, 3); // 从s2的第1位开始取3个字符("ell") ``` • **析构函数**:自动释放内存。 2. **赋值操作** • `operator=`:支持字符串、字符、初始化列表等赋值。 ```cpp s1 = "World"; s1 = 'X'; s1 = {'a', 'b', 'c'}; ``` #### 三、容量操作 1. **长度与容量** • `size()`/`length()`:返回有效字符数(无`'\0'`)。 • `capacity()`:返回预分配内存大小(≥`size()`)。 • `reserve(n)`:预分配至少`n`字节内存,减少扩容开销。 2. **调整大小** • `resize(n, c)`:调整有效字符数,不足补字符`c`(默认空格)。 • `clear()`:清空内容(`size=0`,容量不变)。 • `shrink_to_fit()`:请求释放多余内存(依赖编译器实现)。 #### 四、元素访问 1. **下标访问** • `operator[]`:直接访问字符,不检查越界。 • `at(pos)`:访问前检查越界,越界抛异常。 • `front()`/`back()`:访问首尾字符。 2. **迭代器** • `begin()`/`end()`:正向迭代器(可修改)。 • `cbegin()`/`cend()`:常量迭代器(不可修改)。 • `rbegin()`/`rend()`:反向迭代器。 #### 五、字符串修改 1. **追加内容** • `operator+=`:追加字符串、字符。 • `append()`:支持子串、C字符串、重复字符等追加。 • `push_back(c)`:尾部插入单个字符。 2. **插入与删除** • `insert(pos, str)`:在`pos`处插入字符串。 • `erase(pos, len)`:从`pos`删除`len`个字符。 • `replace(pos, len, str)`:替换指定范围的字符。 3. **其他操作** • `swap(str)`:高效交换两字符串内容(仅交换指针)。 • `pop_back()`:删除最后一个字符。 #### 六、字符串操作 1. **C风格转换** • `c_str()`:返回`const char*`(以`'\0'`结尾),用于C API交互。 2. **查找与子串** • `find(str, pos)`:从`pos`查找子串,返回位置或`npos`。 • `substr(pos, len)`:提取子串。 • `compare(str)`:比较字符串(类似`strcmp`)。 3. **其他查找** • `find_first_of("abc")`:查找任意匹配字符。 • `find_first_not_of("abc")`:查找第一个不匹配字符。 #### 七、非成员函数 1. **运算符重载** • `operator+`:连接字符串(如`s1 + s2`)。 • `operator>>`/`operator<<`:输入输出(如`cin >> s; cout << s;`)。 • `getline()`:读取整行(包括空格)。 2. **常量**`npos` • 表示无效位置(如查找失败),值为`size_t`类型的最大值(-1的无符号表示)。 #### 八、关键点总结 • **自动内存管理**:无需手动处理内存分配与释放。 • **动态扩容**:`capacity`自动增长,减少频繁分配开销。 • **兼容C接口**:通过`c_str()`与C风格字符串交互。 • **高效操作**:`swap`、`reserve`等函数优化性能。 • **丰富接口**:覆盖字符串操作常见需求,提升开发效率。 通过掌握`std::string`的核心接口和设计理念,能够高效处理字符串任务,避免C语言中常见的底层错误。 学习交流公开阅读不需要登录登录后可以评论、收藏并同步学习进度。登录暂时还没有评论。
学习交流