C++ STL基础复习笔记 & 思维导图

C++ STL基础复习笔记 & 思维导图,第1张

本文适合有一定基础的人查阅和复习使用

初识STL:

        广义STL分为:容器,算法,迭代器。


容器与算法之间通过迭代器进行无缝连接。


        STL的六大组件:容器,算法,迭代器,仿函数,适配器(配接器),空间适配器。


以下主要介绍容器,算法,迭代器,仿函数;

容器:主要分为两种容器,

序列式容器(强调值的排序),关联式容器(二叉树结构,各元素之间没有严格上的物理排序)

算法:分为质变算法和非质变算法; 注:需要引入头文件#include

质变算法(运算期间会改变区间的元素内容,如:拷贝,替代,删除),非质变算法(不会改变区间的元素内容,如:查找,计数,遍历)

迭代器:容器和算法之间的粘合剂

每个容器都有属于自己的专属迭代器,类似于指针,分为:输入迭代器,输出迭代器,向前迭代器,双向迭代器,随机访问迭代器。


STL基础内容

String容器

#include头文件包含


构造函数(参考类中的各类构造函数)


string'赋值 *** 作
           =赋值,
        str.assign()赋值
        append函数与assign函数类似


字符串拼接
        +=拼接号 可以直接拼接字符串
        str.append()函数拼接.
        括号内前字母后数字可以是仅拼接前n个
        函数括号中可以输入第一个到第n个字母实现拼接到str字符串str1.append(str2,0,4)
 

字符串查找与替换
       str1.find("str")可以返回int类型数据查找到需要找的字符串的位置起始坐标,没有的话返回值为-1
        str1.rfind()函数 rfind函数为从右往左查找函数,其余与find函数类似
        str.replace(x,y,"str")将下标由x号位置起到y号位置的字符串替换为str
注:容器自带函数中的各种函数要求的位置均为迭代器类型

字符串的比较
        int compare (const string &s) const函数原型
        c语言中strcmp()函数
        str1.compare(str2)返回值为零则两字符串相等,大于零则str1大于str2,反之亦然
 

字符串存取
        str.size()函数访问字符串长度。



        1.通过[]访问字符
        2.通过str.at(i)访问字符
 

字符串插入与删除
        插入str.insert(int n, string str)在n下标插入字符串
        删除str.erase(int pos,int n)从某个位置开始删除n个字符
子串获取
        str.substr(int pos,int pos),从初始位置到末位置的一段字符串
 


vector容器
         与数组十分相似,也称为单端数组
    

vector可以动态扩展
        并不是在原空间之后续接空间,而是寻找更大的空间,然后将原数据拷贝新空间,释放原空间
    

vector构造函数
        vector v 采用模版实现类实现,默认构造函数,无参构造函数
        vector(v.begin(),v.end()) 将v[begin(),end()]区间中的元素拷贝给本身
        vector(n,elem) 构造函数,将n个elem拷贝给本身
        vector(const vector &vec) 拷贝构造函数
  

 vector赋值 *** 作
        重载等号运算符
        assign(begin,end),将区间[begin,end]区间的数据拷贝赋值给本身
assign(n,elem),将n个elem赋值给本身
    

vector容器和大小
        empty()判断容器是否为空,返回值为真则为空
        capacity() 判断容器的容量
        size() 判断容器的大小
        resize(int num) 重新指定容器的长度为num,则以默认值填充新位置,如果容器变短,则末尾超出容器的元素会被删除,默认值通常为0
        resize(int num,elem)重新指定容器的长度为num,若容器变长,则以elem的值填充新位置,如果容器变短,则末尾超出容器长度的元素被删除
  

 vector插入和删除
        push_back(ele) 尾部插入元素ele
        pop_back() 删除最后一个元素
        insert(pos,ele)迭代器指向pos插入元素ele
        insert(pos,int count,ele)迭代器指向的pos插入count个元素ele
        erase(pos,)删除迭代器指向的位置
        erase(start,end) 删除迭代器从start到end之间的元素
         clear() 删除容器中的所有元素
    

vector数据存取
        at(int idx) 返回索引idx所指的数据
        operator[]返回索引idx所指的数据
        front() 返回容器中的第一个数据元素
        back() 返回数据中的最后一个数据元素
        vector容器互换
        swap(vec)
        实际用途:巧用swap可以收缩内存空间
  

 vector预留空间
        reserve(len)
        容器预留len个元素长度,预留位置不初始化,元素不可访问
 


deque容器
        被称为双端数组
deque构造函数
        参考vector;

const容器对应const迭代器
    

deque赋值 *** 作
        参考vector
  

 deque大小 *** 作
        参考vector,deque无容量概念
    

deque插入和删除
        参考vector,deque容器包含头删与头插
    

deque数据存取
        同vector
  

 deque排序
        sort(iterator beg,iterator end),支持随机访问的容器



 stack栈容器
 接口
        stack stk;//默认构造
        stack(const stack &stk)//拷贝构造函数
        stack& operator=(const stack &stk)//重载等号赋值
        push(elem)//向栈顶添加元素
        pop()//从栈顶移除数据
        top()//返回栈顶元素
        empty()//判断是否为空
        size()//返回栈的大小
        容器特性:先进后出
 


queue容器
    仅有队头与队尾可访问,不可遍历
    先进先出,队列容器

接口
        构造函数类似于stack容器
        //重载等号运算符赋值
        push(elem)往队尾添加元素
        pop() 从队头移除元素
        back() 返回最后一个元素
        front() 返回第一个元素
        empty()
        size()
 


list容器
    链表:数据域和值阵域,指针域储存下一个节点的位置/上一个节点位置
    

优点:可以对任意位置进行快速的插入和删除;

缺点:容器遍历,查找速度较慢,占用空间大小较大
    迭代器:双向迭代器,仅可以向前或者向后,不支持随机访问,list容器中插入删除元素,不会导致迭代器的实效,在vector容器中是不成立的
  

 list构造函数
        list lst;
        list(beg,end);
        ....//与vector类似
    

list赋值和交换
        参考vector
    

list大小 *** 作
        empty()
        size()
        resize()
    

list插入和删除
        参考vector容器和deque容器;
另:remove(elem)容器中所有elem元素删除
  

list数据存取
        front()返回第一个元素
        back()返回最后一个元素
        list反转和排序
        reverse()
        sort()容器内部算法,不是标准算法
        sort(myCompare)可指定排序顺序

全局函数

bool myCompare(int v1,int v2)
{
          return (v1>v2)
}


set/multiset容器
    set容器会对插入数据进行检测,而multiset不会
  

 关联式容器,会自动排序数据,set容器特点:不允许有重复数据。


multiset容器:允许重复数据
    

构造函数:默认构造,拷贝构造
    

大小和交换:empty(),size(),swap(set)
  

 插入和删除:insert(elem),clear(),erase(pos),erase(beg,end),erase(elem)
  

 查找和统计:find(key)返回迭代器类型,若为end()则未找到
                      count(key) 返回int类型数据
                      内置类型指定排序规则,利用仿函数,在插入之前进行指定

class MyCompare
{
public:
          bool operator()(int v1,int v2)
          {
                  return (v1


set st;
自定义数据类型排序



 map/multimap 容器
    所有元素都为pair  详见最后定义
pai中第一个元素为key(键值)索引第二个为value(实际值)
    关联式容器,按照key值排序
    构造函数:默认构造,拷贝构造,赋值:重载等于号
    大小和交换:size();empty();swap()
    插入和删除:insert(elem),clear(),erase(pos),erase(beg,end),erase(elem)删除
key值元素
    重载[]插入
    查找和统计:find(key),count(key)
    排序:仿函数改变规则



函数对象(仿函数)
    本质上是一个类



谓词
    返回值类型为bool的仿函数



内建函数对象
    算术仿函数
    逻辑仿函数
    关系仿函数



pair对组
    pair p (value1,value2);
pair p = make_pair(value1.value2)
访问第一个数据p.first第二个p.second


附本人自做思维导图,如有遗漏欢迎补充

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/562543.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-01
下一篇 2022-04-01

发表评论

登录后才能评论

评论列表(0条)