zoukankan      html  css  js  c++  java
  • STL常用容器用法总结

    vector

    变长数组,倍增的思想
    size()  返回元素个数
    empty()  返回是否为空
    clear()  清空
    front()/back()
    push_back()/pop_back()
    begin()/end()
    []
    支持比较运算,按字典序
    

    pair<int, int>

    first, 第一个元素
    second, 第二个元素
    支持比较运算,以first为第一关键字,以second为第二关键字(字典序)
    

    string

    字符串
    size()/length()  返回字符串长度
    empty()
    clear()
    substr(起始下标,(子串长度))  返回子串
    c_str()  返回字符串所在字符数组的起始地址
    

    queue

    队列
    size()
    empty()
    push()  向队尾插入一个元素
    front()  返回队头元素
    back()  返回队尾元素
    pop()  弹出队头元素
    

    priority_queue

    优先队列,默认是大根堆
    size()
    empty()
    push()  插入一个元素
    top()  返回堆顶元素
    pop()  弹出堆顶元素
    定义成小根堆的方式:priority_queue<int, vector<int>, greater<int>> q;
    

    stack

    栈
    size()
    empty()
    push()  向栈顶插入一个元素
    top()  返回栈顶元素
    pop()  弹出栈顶元素
    

    deque

    双端队列
    size()
    empty()
    clear()
    front()/back()
    push_back()/pop_back()
    push_front()/pop_front()
    begin()/end()
    []
    

    set, map, multiset, multimap

    基于平衡二叉树(红黑树),动态维护有序序列。当我们需要对序列进行删除操作同时要求其仍然保持有序可以考虑采用这些容器
    size()
    empty()
    clear()
    begin()/end()
    ++, -- 返回前驱和后继,时间复杂度 O(logn)
    
    set/multiset
        insert()  插入一个数
        find()  查找一个数
        count()  返回某一个数的个数
        erase()
            (1) 输入是一个数x,删除所有x   O(k + logn)
            (2) 输入一个迭代器,删除这个迭代器
        lower_bound()/upper_bound()
            lower_bound(x)  返回大于等于x的最小的数的迭代器
            upper_bound(x)  返回大于x的最小的数的迭代器
    map/multimap
        insert()  插入的数是一个pair
        erase()  输入的参数是pair或者迭代器
        find()  查找某元素,找不到返回end()
        count() 查找元素在map中的出现次数,找不到返回0
        []  注意multimap不支持此操作。 时间复杂度是 O(logn)
        lower_bound()/upper_bound()
    

    一道multiset的应用题目
    单就维护动态有序序列这件事,通过使用标记也可以达到,即通过标记表示哪些元素被删除了
    就上述题目而言,每次都需要memcpy一遍标记数组,而数组容量的数量级为1e6级别,但是实际数据个数的数量级却仅为1e3级别,容器拷贝时间消耗明显小于标记数组的复制与恢复
    但就这道题而言,使用容器维护才能满足时间要求,但并不代表维护动态有序序列这件事每次都是使用容器完成

    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位取反
  • 相关阅读:
    C#后台调用前台javascript的五种方法小结
    分页存储过程(一):分页获得单个表的数据 (未验证)
    第一章 单一职责原则 --(抄书)
    虚拟机--第二章java内存区域与内存溢出异常--(抄书)
    虚拟机--第一章走进java--(抄书)
    log4j的配置
    mybatis主配置文件详解
    js判断checkbox是否选中 .checked不管用
    简单的字幕添加方法
    Maven项目管理工具--简单实用与入门
  • 原文地址:https://www.cnblogs.com/G-H-Y/p/14319570.html
Copyright © 2011-2022 走看看