第四十四篇,C++中STL标准模块库

STL标准模板库 standard template library
=========================================
   1.概念
        STL是C++提供给我们开发程序的一个类库,它里面提供大量的模板类,算法给我们使用
     STL库的核心内容
        容器
        迭代器
        常用算法
        函数符(函数对象)


STL中常用的容器
=========================================
   1.作用
        容器是用来存放数据的,容器的本质是模板类

   2.分别介绍常用的容器
      (1)向量容器 vector
             本质是个动态数组,大小是可以自动调节,根据数据的个数会自动调节容器大小
             头文件:#include <vector>
         常用方法:
             (1)赋值
                   void assign (InputIterator first, InputIterator last);
                   范围从[first,last) 包含first,不包含last
                注意:STL模板库中所有的函数,只要涉及到迭代器表示范围的,全部都是包含first,不包含last
             (2)安放数据
                   emplace(迭代器,某个数据)
                   把数据存放到迭代器的前面,不会覆盖到容器中原本的数据

      (2)set容器(集合)
             会自动排序(升序),你输入的无序,但是保存到set中是升序的
             不能存放重复数据
             头文件:#include <set>
         常用方法:
             (1)清空集合
                    clear()
             (2)统计元素
                    count(某个元素值)  //返回这个元素在set中出现的次数
             (3)安放数据
                    pair<iterator,bool> emplace(某个数据)  //自动升序排序,把这个数据安放在合适的位置
                        返回值:pair<iterator,bool>
                                     iterator --》迭代器,指向安放的数据位置
                                     bool --》安放成功true,安放失败false
                                如何获取返回值涉及到迭代器/bool类型
                                     pair<iterator,bool> mypair=emplace(105);
                                     mypair.first --》对应迭代器
                                     mypair.second --》对应bool
             (4)判断set是否为空
                    empty()
             (5)删除数据
                    erase(迭代器)
                    erase(某个元素值)
                    erase(first,last)  //删除[first,last)范围数据
                    set的迭代器不可以做加法,但是可以自增
             (6)查找
                    find(某个元素)  //返回迭代器,指向你找到的元素,没有找到,返回end()
          
      (3)list容器
             头文件:#include <list>
             常用方法:
             (1)带条件的删除
                     remove_if(函数符/函数对象)
             (2)排序
                     sort(函数符/函数对象)
            
      (4)map容器
             存放键值对,用来描述生活中一对一对应关系
             比如:学生姓名  学号
                   张三       1
                   张三       3
                   张三       4
                   李四       2
                 
                   星期      英文
                   星期一    monday
                   星期二    tuesday
                   星期三    wendsday
             左边是键,右边的是值
             同一个键不可以对应多个不同的值
             同一个值可以对应多个不同的键

      (5)stack栈容器

      (6)queue队列容器

   3.auto关键字和新式for循环
       auto关键字:自动匹配类型
       新式for循环:
              for(auto &x:容器对象)
              {
                   引用x可以自动遍历容器对象里面的数据;
              }

   4.迭代器
         类似于指针,专门用来遍历,访问各种容器中的数据
         4.1 迭代器对应的函数
                 begin() --》返回起始位置(容器中第一个元素)的迭代器
                 end()   --》返回末尾位置后面一个位置(容器最后一个元素的后面位置)
         4.2 迭代器分为四种类型
                 读写迭代器:通过这个迭代器既可以访问容器中的元素,也可以修改容器中的元素
                           begin()和end()配合使用,返回的就是读写迭代器
                 只读迭代器
                           cbegin()和cend()配合使用,只能访问数据,不能修改数据
                 逆迭代器:倒着访问数据,从尾到头访问/修改数据
                           rbegin()和rend()配合使用
                 只读逆迭代器:倒着访问数据,从尾到头访问数据,不能修改数据
                           crbegin()和crend()配合使用


函数符/函数对象
=========================================
   1.概念
         C++中的函数符总共有三种:分别是谓词函数,类重载了圆括号(类对象作为实参),Lambda表达式

   2.谓词函数
        分为两种:一元谓词函数,二元谓词函数
        一元谓词函数:函数返回值是bool类型,形参只有一个--》C++把这种类型的函数称之为一元谓词函数
        二元谓词函数:函数返回值是bool类型,形参有两个--》C++把这种类型的函数称之为二元谓词函数

   3.类重载了圆括号
        class 类名
        {
         public:
              bool operator()(形参)
              {


              }
        };

    4.Lambda表达式(匿名函数)
        bool fun(int &x)
        {
            return (x%2==1);
        }
        转换成Lambda表达式:
             把谓词函数的返回值类型和名字全部去掉,用[]代替,其余部分照抄
             [](int &x){return (x%2==1);}  --》Lambda表达式
    5.求一个整数的二进制
           


练习
=========================================
   1.熟悉vector剩余的方法,写代码把这些方法都用一遍
   2.使用vector存放整数,要求用户从键盘输入8个整数(随机输入)
           要求:
                 把8个整数中奇数升序排列,偶数降序排列,并且排序以后的奇数存放到排序以后的偶数的前面
   454  85  4165 855 89  355  8  63
   执行完毕: 63  85 89 355 855 4165 454 8
   3.同一个键--》对应多个不同的值
     同一个值--》对应多个不同的键


作业
=========================================
   1. 从键盘输入两个字符串,判断第一个字符串能不能由第二个字符串里面的字符构成。如果可以构成,返回 true ;否则返回 false
        比如:
             helloworld 
             hel
        思路分析:
             第一步:剔除第一个字符串中重复的字符
                        helloworld --》helowrd
             第二步:剔除第二个字符串中重复的字符
                        hel --》hel
             第三步:再去判断剔除重复字符以后字符能否构成第一个字符串
        
   2. 给定一个字符串来代表一个学生的出勤记录,这个记录仅包含以下三个字符:
       'A’ : Absent,缺勤
      ‘L’ : Late,迟到
      ‘P’ : Present,到场
      如果一个学生的出勤记录中不超过一个’A’(缺勤)并且不超过两个连续的’L’(迟到),那么这个学生这门课就及格。
      你需要根据这个学生的出勤记录判断他是否会及格
                 比如: 张三的出勤记录:  ALLLPPP    //不及格
                                         ALPPPPA    //不及格
                        李四的出勤记录:  ALPPPLPPPPLPP  //及格
             第一步:遍历字符串,统计A的次数
             第二步:判断是否连续迟到了两次以上(不包括两次)
                     string temp="LLL";   substr(截取字符串)
                                         

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肖爱Kun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值