【算法】C++常用STL与STL中常用方法总结

vector

变长数组,倍增的思想

vector<int> a() 默认构造

vector<int> a(10)构造有10个元素的vector容器,默认值为0

vector<int> a(10, -3)构造有10个元素的vector容器,赋值为-3

size()返回容器内元素的个数

empty()返回容器是否为空

这两个方法是所有容器都有的,时间复杂度是O(1)

auto遍历元素也是所有容器都有的

系统为某一程序分配空间时,所需时间与空间大小无关,与申请次数有关

clear()清空容器

front()返回vector的第一个元素

back()返回vector的最后一个元素

push_back()向vector最后插入一个元素

pop_back()向vector最后取出一个元素

begin()迭代器是vector的第0个数

end()迭代器是vector的最后一个数的后一位

vector和数组一样支持随机寻址

vector 容器支持比较运算,按字典序

pair

pair可以看成有两个元素的结构体,并实现了比较函数

pair<int, string> p

p.first 第一个元素

p.second 第二个元素

pair支持比较运算,按字典序,以first为第一关键字,以second为第二关键字

p = make_pair(10, "wzh")构造pair

或者p = {10, "wzh"}C11支持

也可以用pair存储三个数据类型:

pair<int, pair<int, int>>

string

字符串

size()/length()返回字符串长度

empty()

clear()

string 支持+运算符

(1, 2)取字串

第一个参数表示开始截取字符串的位置(从0算起)

第二个参数表示截取字串的长度。若长度大于剩余长度或省略参数,则会截取到最后

c_str()返回存储字符数组的起始地址

printf("%s\n", a.c_str);

(printf无法直接输出字符串)

queue

队列

queue<int> q

没有clear函数,如果想清空的话,可以重新构造:

q = queue<int>()

push()向队尾插入一个元素

front()返回队头元素

back()返回队尾元素

pop()弹出队头元素

priority_queue

优先队列(堆),默认是大根堆

头文件引入的是<queue>

priority_queue<int> heap

构造小根堆的方法:

直接插入负数
定义时定义成小根堆:priority_queue<int, vector<int>, greater<int>>
push() 插入一个元素

top() 返回堆顶元素

pop()弹出堆顶元素

stack

size()

empty()

push() 向栈顶插入一个元素

top() 返回栈顶元素

pop()弹出栈顶元素

deque

双端队列,支持双端插入删除,支持随机访问

size()

empty()

clear()

front()

back()

push_back()/pop_back()

begin()/end()

支持迭代器

set, multiset

基于平衡二叉树(红黑树),动态维护有序序列

size()

empty()

clear()

begin()/end()++,-- 返回前驱和后继,时间复杂度logn

头文件<set>

构造:set<int> S multiset<int> MS

区别:set会忽略重复元素,multiset可以有重复元素

insert()插入一个数

find()查找一个数

count()返回某一个数的个数

erase()

输入是一个数x,删除所有的x,时间复杂度:O(k + logn)k为x的个数

输入一个迭代器,删除这个迭代器

lower_bound(x)返回大于等于x的最小的数的迭代器

upper_bound(x)返回大于x的最小的数的迭代器

map, multimap

头文件

insert()插入的数是一个pair

erase()输入的参数是pair或迭代器

find()

[ ] 可以像数组一样使用map,但是时间复杂度是logn

lower_bound()/upper_bound()

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()等价于~

filp(k)把第k位取反

  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值