c加加学习之day06->STL标准库->day01
1.介绍:C++ 标准模板库(Standard Template Library,简称 STL)是一组泛型编程的模板类和函数,旨在提供常用的数据结构、算法和函数对象。STL 是 C++ 标准库的一部分,极大地提高了编程效率和代码的可重用性。STL 主要分为6个部分。
STL 的设计基于泛型编程的思想,通过使用模板,STL 提供了与类型无关的代码,从而实现了代码的高复用性和灵活性
---------------------------------------------------顺序容器-----------------------------------------------------------
1.顺序容器(Sequence Containers)是一类用于存储和管理具有顺序关系的元素的容器。这些容器允许在容器中的任意位置插入和删除元素,并且可以通过迭代器访问元素。C++ STL中的顺序容器主要包括以下几种
2.1. std::vector
2. std::deque (双端队列)
3. std::list (双向链表)
4. std::forward_list (单向链表):
特性 :单向链表,支持在任何位置快速插入和删除元素。优点 :在任何位置插入和删除元素效率高(O(1)时间复杂度),内存占用较少。 |
缺点 :不支持随机访问,访问元素需要从头节点开始遍历(O(n)时间复杂度)。不支持反向遍历。
5. std::array (C++11引入):
特性 :固定大小的数组,大小在编译时确定,不支持动态调整大小。
优点 :支持随机访问,访问速度快(O(1)时间复杂度)。性能通常优于 std::vector ,因为不需要动态内存分配。
缺点 :大小固定,不能动态调整。
------------------------------------------------------顺序容器--------------------------------------------------
一.顺序容器:顺序容器(Sequence Containers)是一类用于存储和管理具有顺序关系的元素的容器。这些容器允许在容器中的任意位置插入和删除元素,并且可以通过迭代器访问元素。C++ STL中的顺序容器主要包括以下几种:
1.std::vector(动态数组)
2.std::deque(双端队列)
3.std::list(双向链表):
特性 :单向链表,支持在任何位置快速插入和删除元素。优点 :在任何位置插入和删除元素效率高(O(1)时间复杂度),内存占用较少。 |
缺点 :不支持随机访问,访问元素需要从头节点开始遍历(O(n)时间复杂度)。不支持反向遍历
学习网站:vector 类 | Microsoft Learn
二。VECTOR
补充:
双端队列:
3.list双向链表
------------------------------------------------------容器适配器------------------------------------------------------------
1.introduce:
适配器(Adaptors)是标准库中的一个通用概念, 容器、迭代器和函数都有适配器 。
C++中的 适配器是一种设计模式 , 用于将一个类或对象的接口转换为另一个接口,以便不同的类或对象可以相互协作 。适配器模式可以分为类适配器和对象适配器两种形式。
类适配器通过继承源类并实现目标接口来实现适配。在类适配器中,适配器类同时继承自源类和目标接口,并重
新实现目标接口的方法,以将源类的方法转换为目标接口的方法。
对象适配器则通过在适配器类中包装一个源对象来实现适配。在对象适配器中,适配器类持有一个源对象的引用,并实现目标接口的方法,在方法内部调用源对象的相应方法来完成适配。
标准库定义了三个序列容器适配器: stack,queue,priority_queue
1.queue:是一个队列 先进先出
queue不是标准的STL容器,却以标准的STL容器为基础。queue是在deque的基础上封装的
之所以选择deque而不选择vector是因为deque在删除元素的时候释放空间,同时在重新申请空间的时候无需拷贝所有元素
2.stack
stack是一个栈 , 实现先进后出功能 ,
stack不是标准的STL容器,却以标准的STL容器为基础。stack是在deque的基础上封装的。
3.priority_queue
优先级队列:优先级大的先出队,底层数据结构默认是大根堆(完全二叉树)。
优先级队列底层默认把数据组成一个大根堆结构 ,而大根堆的构建就需要在一个内存连续的数组上(堆中结点和它左右孩子的关系是通过下标计算的), vector动态数组底层是绝对连续的,而deque是分段连续的,所以用vector