【C++进阶】深入STL之string:掌握高效字符串处理的关键

2024-06-08 1527阅读

📝个人主页🌹:Eternity._

⏩收录专栏⏪:C++ “ 登神长阶 ”

🤡往期回顾🤡:C++模板入门

🌹🌹期待您的关注 🌹🌹

【C++进阶】深入STL之string:掌握高效字符串处理的关键

【C++进阶】深入STL之string:掌握高效字符串处理的关键

❀STL之string

  • 📒1. STL基本介绍
    • 🎈STL的版本
    • 🎩STL的缺陷
    • 📒2. string类的基本概念
    • 📒3. string类的常用操作
      • 🌈string类对象的常见构造
      • 🌞string类对象的容量操作
      • 🌙string类对象的访问及遍历操作
      • ⭐string类对象的修改操作
      • 📒4. 总结拓展
        • 🔥拓展:getline
        • 💧总结

          前言:STL(Standard Template Library,标准模板库)是C++标准库的重要组成部分,它提供了一系列通用的数据结构和算法。在STL中,string类是一个非常重要的容器,用于处理字符串数据。本文将详细介绍STL中的string类,包括其基本概念、常用操作以及使用示例

          STL的六大组件

          【C++进阶】深入STL之string:掌握高效字符串处理的关键

          📒1. STL基本介绍

          🎈STL的版本

          • 原始版本

            Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使用。 HP 版本–所有STL实现版本的始祖。

          • P. J. 版本

            由P. J. Plauger开发,继承自HP版本,被Windows Visual C++采用,不能公开或修改,缺陷:可读性比较低,符号命名比较怪异。

          • RW版本

            由Rouge Wage公司开发,继承自HP版本,被C+ + Builder 采用,不能公开或修改,可读性一般。

          • SGI版本

            由Silicon Graphics Computer Systems,Inc公司开发,继承自HP版 本。被GCC(Linux)采用,可移植性好,可公开、修改甚至贩卖,从命名风格和编程 风格上看,阅读性非常高。我们后面学习STL要阅读部分源代码,主要参考的就是这个版本

            🎩STL的缺陷

            • STL库的更新太慢了。这个得严重吐槽,上一版靠谱是C++98,中间的C++03基本一些修订。C++11出来已经相隔了13年,STL才进一步更新。
            • STL现在都没有支持线程安全。并发环境下需要我们自己加锁。且锁的粒度是比较大的。
            • STL极度的追求效率,导致内部比较复杂。比如类型萃取,迭代器萃取。
            • STL的使用会有代码膨胀的问题,比如使用vector/vector/vector这样会生成多份代码,当然这是模板语法本身导致的

              📒2. string类的基本概念

              string类是一个模板类,专门用于处理字符串数据。 在C++中,字符串是由一系列字符组成的序列,而string类则提供了对这些字符序列进行高效操作的功能。与传统的C语言风格字符串(以\0结尾的字符数组)相比,string类更加安全和易用,因为它会自动管理内存,并提供了丰富的成员函数来操作字符串

              【C++进阶】深入STL之string:掌握高效字符串处理的关键


              string类成员函数:

              class string
              {
              private:
              	char* ——str;
              	int _capacity;
              	int _size;
              };
              

              【C++进阶】深入STL之string:掌握高效字符串处理的关键


              📒3. string类的常用操作

              🌈string类对象的常见构造

              函数名称功能说明
              string()构造空的string类对象,即空字符串
              string(const char* s)用const对象来构造string类对象
              string(size_t n, char c)string类对象中包含n个字符c
              string(s.begin(), s.end())用迭代区间构造
              string(const string&s)拷贝构造函数
              int main()
              {
              	string s1(); // 空字符串
              	string s2("hello world"); // const对象构造string类对象
              	string s3(10, 'x'); // n个字符c构造
              	string s4(s2.begin(), s2.end()); // 用迭代区间构造
              	string s5 = s2; // 拷贝构造
              	return 0;
              }
              

              注意:在这里迭代器类似于指针!


              🌞string类对象的容量操作

              函数名称功能说明
              size返回字符串有效字符长度
              length返回字符串有效字符长度
              capacity返回空间总大小
              empty检测字符串释放为空串,是返回true,否则返回false
              clear清空有效字符
              reserve为字符串预留空间
              resize将有效字符的个数该成n个,多出的空间用字符c填充
              int main()
              {
              	string s("hello world");
              	// 返回字符串有效字符长度
              	cout 
              	string s("hello world");
              	for (int i = 0; i 
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]