STL汇总

作者学STL学的有点破防,但是STL大法好啊!于是激情开坑。

vector

简单来说就是没有固定大小的数组,可以随着元素的插入和删除进行改变大小。

1.初始化:

基本定义方式为:vector<数据类型名> s;//其中s为数组名

当然也可以使用 s(10)(即十个元素)以及 s[105] (即 105 个 vector s数组,类比二维数组。

2.重要操作:

s.back() //返回最后一个元素

s.front() //返回第一个元素

s[i] //返回第 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//在键为 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:创建一个长度为 N 的 bitset,所有位都被初始化为 0 。

bitset<N> b1[N]:创建一个二维 bitset,或者说 N 个长为 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 即可。同时支持单点修改。

posted @   Aapwp  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
我给你一个没有信仰的人的忠诚
点击右上角即可分享
微信分享提示