zoukankan      html  css  js  c++  java
  • STL

    vector

    变长数组

    • 初始化方式
      • vector a(10, 3); //初始化,10个3
      • vector a[10]; 声明一个数组
    • 支持的函数
      • size() 时间复杂度O(1)
      • length() 同size()
      • empty()
      • clear() 并不是所有的容器都有这个方法
      • front(), back()
      • push_back(), pop_back()
      • begin(), end() 左闭右开
      • 支持随机寻址
    • 倍增思想 : 尽可能减小向系统申请空间的次数,同时又不能浪费空间;每次当容量不够时,重新申请所需空间两倍的空间,并将原数组copy过来,均摊时间复杂度为O(1)
    • 系统为某一程序分配空间所需要的时间与申请的空间大小无关,只与申请次数有关
    • 迭代器方式遍历:
    for(vector<int>::iterator i = a.begin(); i != a.end(); i ++ ) cout << *i << endl;
    
    • 同时支持下标遍历、范围遍历
    • 支持比较运算,从高位向低位按照字典序比较

    pair

    可以存储一个二元组

    • 前后两个变量类型可以任意
    • 获取第一、二个元素:p.first, p.second
    • 支持比较运算,按照字典序排序,优先按照first比较
    • 构造pair:
    p = make_pair(x, y)
    //或者
    p = {x, y};
    
    • 常用情景是“附带卫星数据”、“按照某个主要数据排序”
    • pair相当于帮我们实现了比较函数的结构体

    string

    字符串数组

    • 对字符串的封装
    • 支持的操作:
      • size()
      • empty()
      • clear()
      • '+'
      • substr(a, b) a表示子串的起始位置,b表示子串的长度(缺省表示直到结尾)
      • c_str()可以返回所存储字符数组的起始地址

    queue

    队列

    • 支持的操作:
      • push()
      • front()
      • back()
      • pop()
      • size()
      • empty()
      • 注意没有clear函数、
    • 想要清空,直接重新构造 q = queue()

    priority_queue

    优先队列

    • 需要包含头文件
    • 底层实现是堆
    • 支持的操作:
      • push()
      • pop()
      • top()
      • empty()
      • size()
    • 默认声明的是大根堆
    • 实现小根堆的方式:
      • 插入的时候插入对应数字的负数
      • 按照下面的方式来定义
    priority_queue<int, vector<int>, greater<int>> heap;
    

    stack

    • 支持的操作:
      • push()
      • top()
      • pop()
      • empty()
      • size()

    deque

    双端队列

    • 相当于加强版本的vector
    • 支持的操作:
      • size()
      • empty()
      • clear()
      • front() back()
      • push_front() push_back()
      • pop_front() pop_back()
    • 缺点是很慢

    set, map, multiset, multimap

    • 加multi表示可以有重复元素
    • 底层实现是红黑树
    • ++ -- 时间复杂度logn
    set/multiset
    • 支持的操作:
      • begin() end()
      • insert()
      • find()
      • count()
      • erase()
        • 输入是一个数x,删除所有x 时间复杂度O(k + logn)
        • 输入是一个迭代器,删除这个迭代器
      • lower_bound(x) 返回大于等于x的最小的数的迭代器
      • upper_bound(x) 返回大于x的最小的数的迭代器
    map/multimap
    • 支持的操作:
      • begin() end()
      • insert() 插入的数是一个pair
      • erase() 参数是pair或迭代器
      • find()
      • lower_bound(), upper_bound()
    • 可以像用数组一样用map,时间复杂度是logn

    unordered_set, unordered_map, unordered_multiset, unordered_multimap

    • 和上面的类似,增删改查的时间复杂度是O(1)
    • 不支持lower_bound(), upper_bound()等基于排序的操作
    • 不支持迭代器的++ --

    bitset

    压位

    • 定义: bitset<10000> s;
    • 支持的操作:
      • ~ & | ^
      • 移位运算符
      • == !=
      • []
      • count() 返回有多少个1
      • any() 判断是否至少有一个1
      • none() 判断是否全为0
      • set() 把所有位置为1
      • set(k, v) 将第k位变成v
      • reset() 把所有位变成0
      • flip() 等价于~
      • flip(k) 第k位取反
  • 相关阅读:
    基于边缘计算网关的桥梁结构安全监测应用
    5G工业网关的边缘计算
    5G工业网关和5G工业路由器差异对比分析
    大型网站架构系列:消息队列(二)
    大型网站架构系列:分布式消息队列(一)
    [转]线程安全类的设计
    [转]runloop原理
    [转]深入理解RunLoop
    [转]iOS保持界面流畅的技巧和AsyncDisplay介绍
    [转]面试时如何优雅的谈论OC
  • 原文地址:https://www.cnblogs.com/huhu555/p/14672543.html
Copyright © 2011-2022 走看看