算法笔记——常用STL的使用

本文详细介绍了C++标准库中的几种常用数据结构,如STL vector、pair、queue、priority_queue、stack、deque、set、map及其操作函数。还涉及了字符串(string)的常用方法和队列、堆、栈、双端队列的操作。同时,讨论了set和map的底层实现——平衡二叉树,并提到了unordered_set和unordered_map作为哈希表的替代方案。最后,简要介绍了bitset及其在位操作中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vector(变长数组)

常用函数作用
size()返回元素个数
empty()返回是否是空
clear()清空
front()返回vector的第一个数
back()返回vector的最后一个数
push_back()向vector的最后插入一个数
pop_back()把vector的最后一个数删掉
begin()vector的第0个数
end()vector的最后一个的数的后面一个数

遍历方法
对于 vector <int> a

  1. for(int i = 0;i < a.size();i ++) cout<<a[i]<<" ";
  2. for(vector <int>::iterator i = a.begin();i != a.end();i ++) cout<<*i<<" ";
    注:vector <int>::iterator可以写为auto
  3. for(auto x : a) cout<< x <<" ";

倍增的思想:
系统为某一程序分配空间是,所需时间,与空间大小无关,与申请次数有关

pair

支持比较运算,以first为第一关键字,以second为第二关键字(按字典序)
定义:
pair <类型,类型> 变量名; 两个类型可以不同
初始化方式:
假设有个pair <int,string> p;
p = make_pair(10,"abc");
p = {10,"abc");

常用函数作用
first()第一个元素
second()第二个元素

string

常用函数作用
substr()返回每一个子串
c_str()返回这个string对应的字符数组的头指针
size()返回字母个数
length()返回字母个数
empty()返回字符串是否为空
clear()把字符串清空

queue(队列)

定义:
queue <类型> 变量名;

常用函数作用
size()队列的长度
empty()返回这个队列是否为空
push()往队尾插入一个元素
front()返回队头元素
back()返回队尾元素
pop()把队头弹出

注:队列没有clear函数!
清空
变量名 = queue <int> ();

priority_queue(优先队列,堆)

:默认是大根堆!!!
定义
大根堆:priority_queue <类型> 变量名;
小根堆:priority_queue <类型,vecotr <类型>,greater <类型>> 变量名

常用函数作用
size()堆的长度
empty()返回堆是否为空
push()往堆中插入一个元素
top返回堆顶元素
pop()弹出堆顶元素

:堆没有clear函数!

stack(栈)

常用函数作用
size()栈的长度
empty()返回栈是否为空
push()向栈顶中插入一个元素
top返回栈顶元素
pop()弹出栈顶元素

deque(双端队列)

常用函数作用
size()双端队列的长度
empty()返回双端队列是否为空
clear()清空双端队列
front()返回第一个元素
pop()弹出栈顶元素
back返回最后一个元素
push_back()向最后插入一个元素
pop_back()弹出最后一个元素
push_front()向队首中插入一个元素
pop_front()弹出第一个元素
begin()双端队列的第0个数
end()双端队列的最后一个的数的后面一个数

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

set/multiset

set不允许元素重复,如果有重复就会被忽略,但multiset允许!

常用函数作用
size()返回元素个数
empty()判断是否为空
clear()清空
begin()第0个数,支持++--,返回前驱和后继
end()第0个数,支持++--,返回前驱和后继
insert()插入一个数
find()查找一个数
count()返回某一个数的个数
erase()输入是一个数x,删除所有 x 复杂度 O(k + log n) 输入一个迭代器,删除这个迭代器
lower_bound(x)返回大于等于x的最小的数的迭代器
upper_bound(x)返回大于x的最小的数的迭代器

map/multimap

常用函数作用
insert()插入一个数,插入的数是一个pair
find()查找一个数
erase()(1)输入是pair(2)输入一个迭代器,删除这个迭代器
lower_bound(x)返回大于等于x的最小的数的迭代器
upper_bound(x)返回大于x的最小的数的迭代器

unordered_set,unordered_map,unordered_muliset,unordered_multimap 基于哈希表
和上面类似,增删改查的时间复杂度是O(1)
不支持lower_bound()upper_bound()

bitset(压位)

定义
bitset <个数> 变量名;
支持
~,&,|,^ >>,<< ==,!= []

常用函数作用
count()返回某一个数的个数
any()判断是否至少有一个1
none()判断是否全为0
set()把所有位置赋值为1
set(k,v)将第k位变成v
reset()把所有位变成0
flip()把所有位取反,等价于~
flip(k)把第k位取反
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值