C++ STL

C++ STL

常用的 STL 头文件如下

vector

简单来说vector是一个动态数组,数组长度可变。

和数组一样支持随机访问 [] ,对比数组增加了一些函数:

  • size/empty

size函数会返回vector的元素个数,empty会返回一个bool类型,表示vector是否为空

*所有的STL容器都支持这两个方法,含义也相同,后面不再重复给出

  • clear

清空vector数组

  • begin/end

begin 返回指vector中第一个元素的迭代器(类似指针)

end 返回vector中最后一个元素的迭代器

  • front/back

front 返回vector中第一个元素

back 返回vector中最后一个元素

  • push_back/pop_back

push_back 把元素插入到最后

pop_back 把最后一个元素删除

queue

这个头文件下包含 循环队列 queue 和 优先队列 priority_queue

queue 的函数:

方法描述示例时间复杂度
push入队q .push(x)O(1)
pop出队q.pop()O(1)
front队头元素x = q.front()O(1)
back队尾元素x= q.back()O(1)

priority_queue的函数:

方法描述示例时间复杂度
push入队q .push(x)O(log n)
pop出队q.pop()O(log n)
top查询最大值x = q.top()O(1)

deuqe

deque 是双端队列,支持从队头和队尾插入删除元素,支持像数组一样随机访问

方法描述示例时间复杂度
[]随机访问类比vectorO(1)
begin/enddeque的头/尾迭代器类比vecotrO(1)
front/back返回队头/队尾元素与queue类似O(1)
push_back从队尾入队q.push_back(x)O(1)
push_front从队尾出队q.pop_back()O(1)
pop_back从队头入队q.push_front(x)O(1)
pop_front从队头出队q.pop_front()O(1)
clear清空队列q.clear()O(n)

set

set头文件里包含set和multiset,分别是 有序集合多重有序集合,底层实现是红黑树

set和multiset函数基本相同

  • set/empty/clear

与vector类似

  • begin/end

分别返回set的头/尾迭代器

  • insert

插入一个元素x

  • find

查找一个元素,返回元素的迭代器,若不存在返回end()

  • low_bound/upper_bound

low_bound(x) 返回 >= x的元素中最小的一个的迭代器

upper_bound 返回 > x 的元素中最小的一个迭代器

  • erase

erase(it) 删除it迭代器指向的元素

  • count

count(x) 返回集合中等于x的元素个数

map

Map 是一个键值对的映射,key必须定义小于号运算符

  • size/empty/clear/begin/end

与set类似

  • insert/erase

与set类似

  • find

find(x) 查找map中key为x的二元组,并返回指向该二元组的迭代器,若不存在,返回end()

  • [] 操作符

内容多,不详细展开

bitset

bitset可以看作一个多位的二进制数,每8位占用一个字节,相当于是状态压缩的二进制数组,支持位运算。一般以32为基准,因此n位的bitset执行一次位运算的复杂度可以视为n/32,效率较高

  • 位运算操作符
    ~:按位取反
    &, |, ^ :分别是按位与、或、非运算
    <<, >> :把一个bitset左移、右移若干位
    != ,== : 比较两个bitset的二进制数是否想同

  • []操作符
    s[k]表示s的第k位,可以取值,也可以赋值

  • count
    返回有多少位为1

  • any/none
    若s位所有位都为0,则s.any()返回false,s.none()返回true
    若s位所有位都为1,则s.any()返回true,s.none()返回false

  • set/reset/flip
    s.set() 把s所有位变为1
    s.set(k, v) 把第k位改为v
    s.reset() 把所有位变为0
    s.reset(k) 把第k位变为0
    s.flip() 把所有位取反
    s.flip(k) 把第k位取反

algorithm

这个是一个头文件,里面有一些常用的函数

  • reverse 翻转
  • unique 去重
  • random_shuffle 随机打乱
  • next_permutation 下一个排列
  • sort 排序
  • upper__bound/lower_bound 二分
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值