电子游艺网站开发,建筑设计单位,wordpress 最受欢迎主题,签名设计免费版#x1f308; 个人主页#xff1a;白子寰 #x1f525; 分类专栏#xff1a;重生之我在学Linux#xff0c;C打怪之路#xff0c;python从入门到精通#xff0c;数据结构#xff0c;C语言#xff0c;C语言题集#x1f448; 希望得到您的订阅和支持~ #x1f4a1; 坚持… 个人主页白子寰 分类专栏重生之我在学LinuxC打怪之路python从入门到精通数据结构C语言C语言题集 希望得到您的订阅和支持~ 坚持创作博文(平均质量分82)分享更多关于深度学习、C/Cpython领域的优质内容希望得到您的关注~ 目录
STL六大组件
什么是string
底层实现
为什么要学习string
string常用接口
构造函数
1、无参构造函数
2、带参构造函数
3、拷贝构造函数
4、构造n个单字符函数
容量操作接口
1、size();
2、length();
3、capacity();
4、reserve();
5、resize();
代码 4、5点总结
访问和遍历
1、operator[]
2、迭代器
3、at
4、front and back
5、find and rfind (与npos)
6、c_str
修改字符串操作
1、operator
2、push_back
3、append
4、insert
5、erase
6、swap
7、operator
8、getline
各种运算符重载函数
1、operator and operator
2、比较运算符根据ASCII码值比较 STL六大组件 什么是string 在 C 中string 是标准库中的一个类它用于表示和处理字符串。 string 类是定义在 string 头文件中的它提供了丰富的成员函数来支持字符串的各种操作如拼接、查找、替换等。 底层实现 string 类的底层实现通常依赖于动态数组这个动态数组用于存储字符序列。 具体来说它通常包含以下三个部分 字符数组用于存储实际的字符串数据。长度记录当前字符串中的字符数量。容量记录当前分配的内存可以容纳的字符数量 以下是string类的私有成员
template typename _CharT, typename _Traits, typename _Alloc
class basic_string {
private:_CharT* _MyPtr; // 指向分配的内存的指针size_t _size; // 字符串的长度size_t _capacity; // 分配的内存容量
};为什么要学习string 抽象度高string提供高级抽象简化内存管理。功能丰富内置操作集提升开发效率。安全性好预防缓冲区溢出保障程序安全。跨平台标准库组件确保代码可移植性。 简单来说就是省事、安全、通用、强大 省事用string处理文字更方便不用手动管理内存。安全用string不容易出错减少程序崩溃的风险。通用不管在哪个系统string的表现都一样方便移植。强大string能干的事情多比如查找、替换文字都很简单。 string常用接口
构造函数
1、无参构造函数 函数原型string(); 创建了一个空的string对象 2、带参构造函数 函数原型string(const char* s); 用字符串(即以\0结尾的字符数组)初始化string对象 3、拷贝构造函数 函数原型string operator(const string str); 这个操作符重载函数允许你使用一个string对象来赋值给另一个已经存在的string对象 4、构造n个单字符函数 函数原型string(size_t n,char c); 创建一个包含n个字符c的string对象 容量操作接口
1、size(); size_t size() const; 返回字符串中字符的数量 2、length(); size_t length() const; 与size()函数作用相同实际没有什么区别 返回字符串中字符的数量 3、capacity(); size_t capacity() const; 返回字符串当前容量即在不重新分配内存的情况下字符串可以容纳的最大字符数 简单来说就是像文本文件当前可以容纳多少字符而不会超出文件系统的分配 4、reserve(); void reserve(size_t new_cap); 用来设置字符串的容量至少为new_cap 5、resize(); void resize(size_t n); 用来改变字符串的长度到n个字符 代码 4、5点总结 访问和遍历
1、operator[] char operator[](sizet pos); 允许像访问数组一样访问字符串中的单个字符。它返回指定位置pos的字符的引用。 如果你提供的索引超出了字符串的范围它不会检查边界可能会导致未定义行为 2、迭代器 ①正向迭代器iterator begin(); ②反向迭代器reverse_iterator rbegin(); 正向迭代器begin()返回指向字符串第一个字符的迭代器 而反向迭代器rbegin()返回指向字符串最后一个字符的迭代器。 迭代器可以用来遍历字符串中的所有字符。 迭代器的本质是范围for 3、at char at(sizet pos); 返回指定位置pos的字符的引用 与operator[]不同的是如果pos超出了字符串的范围at会抛出一个std::out_of_range异常。 4、front and back front原型char front(); back原型char back(); front()返回字符串第一个字符的引用 而back()返回字符串最后一个字符的引用 如果字符串为空这些操作将导致未定义行为 5、find and rfind (与npos) find原型sizet find(const string str, sizet pos 0) const; rfind原型sizet rfind(const string str, sizet pos npos) const; find()从字符串的起始位置开始查找子字符串str返回第一次出现的位置索引。如果找不到返回npos。 rfind()从字符串的末尾开始查找子字符串str返回最后一次出现的位置索引。如果找不到也返回npos 什么是npos? npos是std::string类中的一个静态常量成员表示不存在的位置它的值通常是一个非常大的数可以认为是字符串的最大可能大小加1 当查找函数返回npos时意味着没有找到匹配项 6、c_str const char* c_str() const; 返回一个指向以空字符终止的字符数组的指针这个数组与字符串的内容相同。 这通常用于在需要C风格字符串的函数中使用std::string对象 修改字符串操作
1、operator string operator(const string str); //追加一个string类
string operator(const char* s); //追加字符串
string operator(char c); //追加字符用于将一个字符串或字符追加到当前字符串的末尾 2、push_back void push_back(char c);用于将一个字符添加到字符串的末尾 3、append string append(const string str); // 追加string
string append(const char* s); // 追加字符串
string append(const char* s, size_t n); // 追加字符串的前n个字符
string append(size_t n, char c); // 追加n个字符用于将字符串或字符序列追加到当前字符串的末尾 4、insert string insert(size_t pos, const string str);
string insert(size_t pos, const char* s);
string insert(size_t pos, const char* s, size_t n);
string insert(size_t pos, size_t n, char c);
iterator insert(iterator p, char c);
void insert(iterator p, size_t n, char c);
void insert(iterator p, iterator first, iterator last);用于在字符串的指定位置插入另一个字符串或字符序列 5、erase string erase(size_t pos 0, size_t len npos);
iterator erase(iterator p);
iterator erase(iterator first, iterator last);用于从字符串中移除字符可以移除单个字符也可以移除一个范围内的字符 6、swap void swap(string str);用于交换两个字符串的内容 7、operator string operator(const string str1, const string str2);
string operator(const string str, const char* s);
string operator(const char* s, const string str);
string operator(const string str, char c);
string operator(char c, const string str);用于连接两个字符串或字符串与字符 8、getline istream getline(istream is, string str, char delim \n);用于从输入流中读取一行直到遇到指定的分隔符默认是换行符并将其存储到字符串中。 各种运算符重载函数
1、operator and operator istream operator(istream is, string str);
ostream operator(ostream os, const string str);operator这个运算符重载用于从输入流如 cin读取字符串。它读取直到下一个空白字符空格、制表符或换行符为止的字符序列并将其存储到字符串中operator这个运算符重载用于将字符串输出到输出流如 cout。它将字符串的内容输出到流中。 2、比较运算符根据ASCII码值比较 bool operator(const string str) const;
bool operator!(const string str) const;
bool operator(const string str) const;
bool operator(const string str) const;
bool operator(const string str) const;
bool operator(const string str) const; ***********************************************************分割线***************************************************************************** 完结 感谢浏览和阅读。 等等等等一下分享最近喜欢的一句话: “一个人可能走得更快但一群人走得更远”。 我是白子寰如果你喜欢我的作品不妨你留个点赞关注让我知道你曾来过。 你的点赞和关注是我持续写作的动力 好了划走吧。