前言
STL,即标准模板库。标准模板库是一个C软件库,大量影响了C标准程序库但并非是其的一部分。本文主要讲解标准模板库中的 STL容器。其可以帮助你更好、更方便的写题。
Ⅰ、VECTOR
vecotr,是动态数组,与普通数组的主要区别是可以动态修改数组长度,我们可以通过以下方式定义一个 vector 数组:
需要注意的是,vector 的大小跟普通数组一样,下标从 000 开始。
vector 的动态修改数组长度 功能十分好用,很多时候我们不能提前开好那么大的空间。尽管我们能知道数据总量在空间允许的级别,但是单份数据还可能非常大,这种时候我们就需要 vector 来把内存占用量控制在合适的范围内。vector 还支持动态扩容,在内存非常紧张的时候这个特性就能派上用场了。
vector 基本可以代替我们的普通数组,以下是一些主要操作说明:
此时应该输出:
Ⅱ、SET
set 是关联容器,含有键值类型对象的已排序集,搜索、移除和插入拥有对数复杂度。set 内部通常采用 红黑树 实现。平衡二叉树 的特性使得 set 非常适合处理需要同时兼顾查找、插入与删除的情况。
set 比较常用的功能是查重。set 可以自动查重并排序,特别的是,你可以使用 multiset 完成可重复的有序 set,或使用 unordered_set 完成可重复的无序 set。
以下是一些比较常用的 set 用法:
不出意外应该输出以下内容:
set 可以方便的进行查重、查找等操作,并且时间复杂度并不高。
Ⅲ、MAP
map 是C++标准模板库中的一个关联容器,它存储键值对,并提供基于键的高效查找功能,和set一样,它可以自动排序和查重。插入、删除、查找的时间复杂度仅为O(log n),空间复杂度:O(n),是非常好用的STL容器。相同的,和set一样,你可以使用 multimap 完成可重复的有序 map,或使用 unordered_map 完成可重复的无序 map。
map 可以看作一个支持多种类型下标的数组,你可以用它来完成桶排序,并且可以让出了int以外类型来当作下标。
输出:
Ⅳ、STACK
stack 是C++标准模板库中的一种容器适配器,它提供后进先出(LIFO)的数据结构,限制了元素的访问方式,仅允许在栈顶进行插入和删除操作。
以下是一些常用的 stack 操作示例:
输出结果:
stack 的主要特点:
1. 后进先出(LIFO):最后压入的元素最先弹出。
2. 限制访问:只能访问栈顶元素,不能直接访问中间或底部元素。
3. 高效操作:压栈和弹栈的时间复杂度为 O(1)。
Ⅴ、QUEUE
这玩意我们一般叫缺缺
queue 是C++标准模板库中的一种容器适配器,它提供先进先出(FIFO)的数据结构。queue 通常基于 deque 或 list 实现,但限制了元素的访问方式,仅允许在队尾插入(push)和在队头删除(pop)。
基本操作示例
输出结果:
特点
1. 先进先出(FIFO):先入队的元素先出队。
2. 限制访问:只能访问队头和队尾元素,不能直接访问中间元素。
3. 高效操作:入队和出队的时间复杂度为 O(1)。
如果需要自动排序的队列,可以使用 priority_queue(优先队列),它基于堆实现,默认是大根堆,队头元素始终是最大的。
输出:
queue 是处理顺序性任务的强大工具,而 priority_queue 则适用于需要动态获取最值的场景。
Ⅵ、STRING
string 是C++标准模板库中提供的字符串类型,比C风格的字符数组(char[])更安全、更易用。它支持动态内存管理,并提供了丰富的字符串操作方法,如拼接、查找、替换、子串提取等。
常用操作:
输入整行(含空格)
string 提供了比C风格字符串更安全、更便捷的操作,适用于大多数字符串处理场景。它的动态内存管理避免了缓冲区溢出的风险,同时丰富的API极大提高了开发效率。
Ⅶ、PAIR
1. 是什么?
* 存两个值的小容器
* 常用在需要返回两个值的地方
基本用法
返回两个值
当map用
排序数组
pair可以当一个简化版的struct使用,但是更方便。
总结
STL真方便!