STL汇总
作者学STL学的有点破防,但是STL大法好啊!于是激情开坑。
vector
简单来说就是没有固定大小的数组,可以随着元素的插入和删除进行改变大小。
1.初始化:
基本定义方式为:vector<数据类型名> s;//其中s为数组名
当然也可以使用 s(10)
(即十个元素)以及 s[105]
(即 105 个 vector
2.重要操作:
s.back()
//返回最后一个元素
s.front()
//返回第一个元素
s[i]
//返回第
s.clear()
//清空
s.empty()
//判断是否为空
s.pop_back()
//删除最后一个元素
s.push_back()
//在最后一个元素后插入一个元素
s.size()
//返回元素个数
s.insert(a.begin()+1,5)
//在 a 的第一个元素(从 0 算起)的位置插入5
s.erase(s.begin()+1,a.begin()+3)
//删除 a 中第一个(从第 0 个算起)到第二个元素,包括开始,不包括结尾。
map
map 作为一个关联容器,所存储的元素都是键值对(key-value),并且根据键自动排序, map 不允许键重复。且 map 容器中的每一个元素都是一个 pair 结构的数据。(其实是更加方便的pair<int,int> 数组。
1.初始化
基本定义格式为:map<int,string> a;
,其中 int 为键类型,值类型为 string。
2.重要操作
a.insert(make_pair([],[]))
//使用 make_pair 插入元素
a[i]=t
//在键为
a.clear()
//清空
a.empty()
//判断是否为空
a.size()
//返回元素个数
map 也可以使用 find 和迭代器,如:
//使用find 方法查找键在map中的位置,然后修改其值
auto it=a.find(3);
if(it!=a.end()){//键存在
it->second='';
}
a.erase(5)
//删除指定键的元素
注意:map 默认按照键升序进行排序,可以手写函数进行改变。
unordered_map
原理同 map,只是 umap 所存储的数据不会默认排序,是无序的。
优点是查找速度极快,更加高效,可以用来卡常。
bitset
写 dp 的时候发现 bitset 优化可行性/01背包转移真的太常见了,于是学习一下。
bitset 相当于一个存储01串的二进制数组。
1.定义及初始化
bitset<N> b1
:创建一个长度为
bitset<N> b1[N]
:创建一个二维 bitset,或者说
2.位运算操作(这也是 bitset 的强大之处
定义两个 bitset b1,b2。
b1^=b2
:b1 对 b2 按位异或后赋值给 b1
b1&=b2
: b1 对 b2 按位与后赋值给 b1
b1|=b2
: b1 对 b2 按位或后赋值给 b1
b1<<=2
: 左移 2 位
b1>>=2
: 右移 2 位
~b1
: 按位取反
b1==b2
: 判断 b1 与 b2 是否相等
b1&b2
: b1 对 b2 按位与。不赋值
3.元素访问和修改
注意 bitset 赋值后,下标从右往左,若想正序输出,直接 cout 整个 bitset 即可。同时支持单点修改。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律