C++初阶:初识STL、String类接口详细讲解(万字解析)

2024-02-26 1153阅读

温馨提示:这篇文章已超过391天没有更新,请注意相关的内容是否还可用!

上次介绍完了模版和泛型编程:C++初阶:入门泛型编程(函数模板和类模板)

今天开始stl的内容了


文章目录

  • 1.STL介绍
    • 1.1概念(标准模板库)
    • 1.2版本问题(主流有4个)
    • 1.3 STL六大组件
    • 2.string类的基本介绍
    • 3. string类对象的构造(构造函数)
    • 4.访问及遍历操作
      • 4.1operator[ ] ([ ]加下标)
      • 4.2基于范围for
      • 4.3使用迭代器(最推荐使用)
      • 5.string的迭代器(Iterator)
        • 5.1介绍
        • 5.2 begin()和end()(正向和常正向)
        • 5.3rbegin()和rend()(反向和常反向)
        • 6.string类对象的容量操作
          • 6.1size和length
          • 6.2capacity
          • 6.3 reserve和rsize
          • 7.string类对象的修改操作(+=,insert,erase)
            • 7.1重载的+=(最常用的尾插)
            • 7.2insert(效率不是很好)
            • 7.3 erase(任意位置删除)
            • 补充:npos
            • 8.String operations函数(find,rfind,substr)
              • 8.1find
              • 8.2rfind
              • 8.3substr(截取字符串)

                1.STL介绍

                1.1概念(标准模板库)

                STL (standard template libaray - 标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架

                1.2版本问题(主流有4个)

                • 原始版本

                  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要阅读部分源代码,主要参考的就是这个版本

                  1.3 STL六大组件

                  1. 容器(Containers):STL提供了多种容器,包括数组(vector)、链表(list)、双端队列(deque)、集合(set)、映射(map)等。这些容器提供了不同的数据结构,以满足各种不同的需求。
                  2. 算法(Algorithms):STL包含了大量的常用算法,如排序、查找、遍历等,这些算法可以用于各种容器,使得对数据的处理变得非常方便。
                  3. 迭代器(Iterators):迭代器是STL中用于遍历容器中元素的工具,它提供了一种统一的访问容器元素的方式,使得算法能够适用于不同类型的容器。
                  4. 仿函数(Functors):仿函数是一种类对象,它重载了函数调用操作符(),使得可以像函数一样调用这个类对象。STL中的很多算法都可以接受仿函数作为参数,以实现更加灵活的功能。
                  5. 适配器(Adapters):STL提供了一些适配器,如栈(stack)、队列(queue)、优先队列(priority_queue),它们是基于其他容器实现的高层次数据结构,提供了特定的操作接口。
                  6. 分配器(Allocators):分配器用于管理内存分配和释放,STL提供了一些标准的分配器,同时也允许用户定义自己的分配器,以满足特定的内存管理需求。

                  C++初阶:初识STL、String类接口详细讲解(万字解析)


                  2.string类的基本介绍

                  在 C 语言中,字符串是以 null 结尾的字符数组,需要手动管理内存和处理字符串操作。string.h 头文件提供了一系列库函数,如 strlen、strcpy、strcat 等,用于对字符串进行操作。但是这些函数的确与字符串是分离的,需要手动管理内存,容易出现越界访问等问题。

                  而在 C++ 标准库中,提供了 std::string 类,它封装了字符串的操作,提供了丰富的成员函数和运算符重载,使得字符串的操作更加方便和安全。std::string 类封装了字符串数据和长度,隐藏了内存管理的细节,提供了自动扩容、内存管理、异常安全性等功能,大大简化了字符串的操作

                  总结:

                  • string是表示字符串的字符串类

                  • 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作

                    实际上,std::string 是 C++ 标准库中的一部分,而 STL(标准模板库)是 C++ 标准库的子集,但是由于它和其他 STL 容器(如 std::vector、std::list)有着相似的使用方式,因此可以将其放在一起学习和使用(出现了.length()和.size()计算长度的原因,一个是自带的,一个是为了与其他容器相配)

                  • string在底层实际是:basic_string模板类的别名 typedef basic_string string,是 basic_string 类模板使用字符类型 char 实例化得到的一个类

                    C++初阶:初识STL、String类接口详细讲解(万字解析)

                  • 我们使用string进行实例化时不用显示实例化,因为本身就是basic_string


                    3. string类对象的构造(构造函数)

                    C++初阶:初识STL、String类接口详细讲解(万字解析)

                    构造函数名称功能说明
                    string()构造空的string类对象,即空字符串
                    string(const char* s)用 C 风格的字符串(以 null 结尾的字符数组)来构造string类对象
                    string(size_t n, char c)string类对象中包含n个字符c
                    string(const string& s)拷贝构造函数
                    #include
                    using namespace std;
                    int main()
                    {
                    	string s1;
                    	string s2("abcd");
                    	string s3(5, 'c');
                    	string s4(s2);
                    	cout 
VPS购买请点击我

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

目录[+]