• 浅谈C++STL容器


    引入

     STL(Standard template library)也称作标准模板库。是C++提供的一些功能强大的容器,可以一定程度上省去手写数据结构的麻烦。

    目录

    • #include<stack>
    • #include<queue>
    • #include<vector>
    • #include<deque>
    • #include<map>
    • #include<set>

    一.栈(stack)

    介绍:

    栈是最简单的STL容器,手写只需要用一个数组和一个指向栈顶的指针(但我还是喜欢用STL)

    方法  描述  实例  时间复杂度
     push  从栈顶入栈  st.push(x); O(1) 
    pop  从栈顶出栈   st.pop(); O(1)
     size 查询元素个数  int x=st.size();  O(1) 
    empty  查询是否为空  bool flag=st.empty();  O(1) 

     此外,所有的STL容器都支持size和empty,之后不再赘述

    特点:先进后出

    二.队列(queue)

    常见的队列分为两种,一种是循环队列(queue),一种是优先队列(priority_queue);相比于栈,队列不易手写(普通的数组模拟循环队列会浪费空间),所以一般引入STL

    1.队列:

    方法 描述 实例 时间复杂度
    push 从队首插入元素 q.push(x); O(1)
    pop 从队首删除元素 q.pop(); O(1)
    front 访问队首元素 int x=q.front(); O(1)
    back 访问队尾元素 int x=q.back(); O(1)
    • 特点:先进先出
    • 应用:BFS,SPFA等
    • 常用写法:while(!q.empty())...

    2.优先队列

    默认是大根堆(队列内元素排序从大到小)

    若需更复杂的操作需要重载运算符,详见我以前写的文章优先队列和重载运算符(点击查看)

    优先队列的push和pop时间复杂度都是O(nlogn),但访问队首的top为O(1)

    三.无限长度数组(vector)

    1.声明:vector<int> v;

    2.遍历:for(int i=0;i<(int)v.size();i++)

    注意:vector下标从0开始

    方法 描述 实例 时间复杂度
    clear 清空元素 v.clear(); O(n)
    front/back 访问首/尾元素 int x=v.front(); O(1)
    push_back/pop_back 删除首/尾元素 v.push_back(x); O(1)
    erase 删除一个元素 v.erase(x); 大概是O(n)

    关于erase,返回的是删除的元素的迭代器地址的下一位,也不太常用(我也不太会)

    迭代器声明:vector<int>::iterator it;(it是地址指针,名字随便起,*it表示it地址里面的元素)

    应用:邻接表存图v[x].push_back(y);

    四.双端队列(deque)

    相当于queue和vector的结合体,可以增删元素,也可以以数组的下标形式访问

    五.set

    • 相当于一个有序的集合(没有重复元素)
    • 大部分操作时间复杂度O(nlogn)
    • mutiset就是有重复元素的set
    • 用法:借鉴了大佬mrclr的博客-------------------传送门(点击查看)

    六.map

    • 可以看作一个下标和值都任意的数组
    • 大部分操作时间复杂度O(nlogn)
    • 同理有mutimap,具体可以看下面的用法
    • 用法:借鉴了大佬mrclr的博客-------------------传送门(点击查看)

    感谢阅读!

  • 相关阅读:
    [编程题] 微信红包
    MYSQL实现主从复制
    有关windows系统的EXE和DLL文件说法错误
    Http错误代码
    一步步优化JVM四:决定Java堆的大小以及内存占用
    一步步优化JVM三:GC优化基础
    一步步优化JVM二:JVM部署模型和JVM Runtime
    一步步优化JVM一:概述、方法及需求
    排查Java线上服务故障的方法和实例分析
    【转】Zookeeper-Watcher机制与异步调用原理
  • 原文地址:https://www.cnblogs.com/conprour/p/14380295.html
Copyright © 2020-2023  润新知