C++ STL简介

C++ STL简介

1.vector, 变长数组,倍增的思想

#include<vector>

vector<int> nums;
nums.size()  // 返回元素个数
nums.empty()  // 返回是否为空
nums.clear()  // 清空
nums.front()/nums.back()
nums.push_back()/nums.pop_back()
nums.begin()/nums.end()
nums[]
// 支持比较运算,按字典序

2.pair<int, int>

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

3.string,字符串

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

4.queue, 队列

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

5.priority_queue, 优先队列,默认是大根堆

.size()
.empty()
.push()  // 插入一个元素
.top()  // 返回堆顶元素
.pop()  // 弹出堆顶元素
// 定义成小根堆的方式:priority_queue<int, vector<int>, greater<int>> q;

6.stack, 栈

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

7.deque, 双端队列

.size()
.empty()
.clear()
.front()/back()
.push_back()/pop_back()
.push_front()/pop_front()
.begin()/end()
[]

8.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()
        []  // 注意multimap不支持此操作。 时间复杂度是 O(logn)
        lower_bound()/upper_bound()

9.unordered_set, unordered_map, unordered_multiset, unordered_multimap, 哈希表

// 和上面类似,增删改查的时间复杂度是 O(1)
// 不支持 lower_bound()/upper_bound(), 迭代器的++,--

10.bitset, 圧位

bitset<10000> s;
    ~, &, |, ^
    >>, <<
    ==, !=
    []

    count()  返回有多少个1

    any()  判断是否至少有一个1
    none()  判断是否全为0

    set()  把所有位置成1
    set(k, v)  将第k位变成v
    reset()  把所有位变成0
    flip()  等价于~
    flip(k) 把第k位取反

参考:www.acwing.com

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值