C++从入门到实战(十六)String(中)String的常用接口(构造接口,析构接口,迭代器,遍历修改,容量管理与数据访问)
C++从入门到实战(十六)String(中)详细讲解String的常用接口
- 前言
- 一、std::string
- 二、string的构造接口
- 1. 默认构造函数:创建空字符串
- 2. 拷贝构造函数:复制已有字符串
- 3. 从已有字符串截取部分
- 4. 用C风格字符串构造
- 5. 用C风格字符串的前n个字符构造
- 6. 用重复字符构造
- 7. 用迭代器构造(了解即可)
- 三、string的赋值与析构
- 1. 析构函数 ~string()
- 2. 赋值运算符 operator=
- 2.1 用另一个 string 对象赋值(常用)
- 2.2 用 C 风格字符串赋值(了解即可)
- 2.3 用单个字符赋值
- 四、string::iterator迭代器(重点掌握)
- 1. 为什么需要迭代器?
- 2. 迭代器的基本使用(像指针一样操作)
- 3. 迭代器的4种类型
- 4. 迭代器的边界
- 5. 修改字符串(通过迭代器写操作)
- 6. 迭代器与STL算法结合
- 7. 安全注意事项
- 五、string的遍历与修改
- 1. string的遍历(逐个访问字符)
- 2. string的修改(增删改查)
- 3. string的底层(了解即可)
- 六、String里的Capacity(容量管理)
- 1. size() 和 length()(获取字符串长度)
- 2. max_size()(最大容量)
- 3. resize(n) 和 resize(n, c)(调整大小)
- 4. capacity()(当前分配的容量)
- 5. reserve(n)(预分配容量)
- 6. clear()(清空字符串)
- 7. empty()(判断是否为空)
- 8. shrink_to_fit()(缩容)
- 总结
- 底层原理(了解即可)
- 八、string数据访问
- 1. operator[](下标访问)
- 2. at() 方法(安全访问)
- 3. back()(访问最后一个字符)
- 4. front()(访问第一个字符)
前言
- 在上一篇博客中,我们深入探讨了 STL 与 String 的内在联系,解析了 string 类的设计初衷以及它在 C++ 编程中的重要价值。
- 通过剖析 string 类在内存管理、字符操作和 STL 容器适配等方面的独特优势,我们理解了它作为 C++ 标准字符串处理工具的核心地位。
- 本篇博客将进入 string 的实战环节,重点解析 string 类的常用接口
我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的C++知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12880513.html?spm=1001.2014.3001.5482
C++string的官方讲解网站
https://cplusplus.com/reference/string/string/?kw=string
一、std::string
typedef basic_string string;
std::string 是 C++ 标准库中用于处理字符串的类,它让我们可以像操作普通变量一样方便地处理文本数据。
-
简单来说,string 就是 C++ 为程序员提供的「字符串神器」,不用再手动管理内存,也不用操心字符串长度,各种常用操作都已经帮你写好了。
-
string的接口有很多,我们先来看一看他的接口有哪些,后面会挨个详细讲
接口名 功能简述 构造函数 创建字符串对象 析构函数 销毁字符串对象 operator= 字符串赋值操作 迭代器 begin() 返回指向字符串起始位置的迭代器 end() 返回指向字符串末尾(‘\0’ 之后)的迭代器 rbegin() 返回反向迭代器,指向字符串末尾 rend() 返回反向迭代器,指向字符串起始位置之前 cbegin() 返回 const 迭代器,指向字符串起始位置 cend() 返回 const 迭代器,指向字符串末尾 crbegin() 返回 const 反向迭代器,指向字符串末尾 crend() 返回 const 反向迭代器,指向字符串起始位置之前 容量操作 size() / length() 返回字符串长度(不包含终止符) max_size() 返回字符串的最大可能长度 resize(n) 调整字符串长度为 n,超出部分截断,不足部分填充默认字符 capacity() 返回当前分配的存储空间大小 reserve(n) 请求至少能容纳 n 个字符的存储空间(可能扩大 capacity) clear() 清空字符串内容 empty() 判断字符串是否为空 shrink_to_fit() 释放未使用的内存,使 capacity 等于 size 元素访问 operator[] 通过下标访问字符(不检查越界) at() 通过下标访问字符(越界时抛出异常) back() 访问最后一个字符 front() 访问第一个字符 修改操作 operator+= 追加内容到字符串末尾 append() 追加内容到字符串末尾 push_back() 追加单个字符到字符串末尾 assign() 赋值新内容给字符串 insert() 在指定位置插入内容 erase() 删除指定位置的字符或子串 replace() 替换指定位置的子串 swap() 交换两个字符串的内容 pop_back() 删除最后一个字符 字符串操作 c_str() 返回 C 风格字符串(以 ‘\0’ 结尾的 const char*) data() 返回字符串数据的指针(C++11 起与 c_str() 相同) get_allocator() 返回用于内存分配的 allocator 对象 copy() 将字符串内容复制到字符数组中 find() 查找子串或字符首次出现的位置 rfind() 从后向前查找子串或字符首次出现的位置 find_first_of() 查找字符串中第一个与指定字符集中任何字符匹配的位置 find_last_of() 从后向前查找字符串中第一个与指定字符集中任何字符匹配的位置 find_first_not_of() 查找字符串中第一个不与指定字符集中任何字符匹配的位置 find_last_not_of() 从后向前查找字符串中第一个不与指定字符集中任何字符匹配的位置 substr() 返回子串(从指定位置开始的指定长度的子串) compare() 比较两个字符串的大小(字典序) 二、string的构造接口
- string 类提供了多种构造函数,让你可以用不同的方式创建字符串对象。下面是最常用的几种构造方式。
1. 默认构造函数:创建空字符串
string();
作用:创建一个空的字符串对象,不包含任何字符。
例子:
string s; // 创建空字符串 cout string s = "hello"; // 创建对象 } // 离开作用域,s 自动销毁,内存自动释放 string s = "hello"; // 正向遍历(从前往后) for (string::iterator it = s.begin(); it != s.end(); ++it) { cout cout cout *it = toupper(*it); // 转为大写 } cout cout if (*it == 'l') { s.erase(it); // 错误!删除元素后迭代器失效 } else { ++it; } } if (*it == 'l') { it = s.erase(it); // 正确!更新迭代器 } else { ++it; } } cout cout cout s.erase(it); // 错误!删除元素后迭代器失效 } cout cout
- string 类提供了多种构造函数,让你可以用不同的方式创建字符串对象。下面是最常用的几种构造方式。
-
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。