C++八股文--STL详解

STL六大组件

容器详解

算法详解

迭代器详解

仿函数详解

适配器详解

空间配置器

STL常用代码


STL六大组件

标准模板库(Standard Template LIbrary),是C++的一个软件库。STL提供了六大组件:

  • 容器:各种数据结构,例如vector,list,deque,set,map等,是类模板
  • 算法:各种常用算法,例如sort,search,copy,erase等,是函数模板
  • 迭代器:容器算法耦合剂,泛型指针,类模板
  • 仿函数:算法某种策略
  • 适配器:修饰容器、迭代器或仿函数,例如queue,stack
  • 配置器:空间配置、管理、释放,是类模板;STL每个容器都指定了缺省空间配置器alloc。

容器详解

定义:置物之所。主要运用数据结构实现,这些数据结构包含数组、链表、树、栈、队列、集合、映射表等。

分类序列容器关联容器。序列式容器强调值的排序,序列式容器中的每个元素均有固定的位置。 关联式容器为二叉树结构,各元素之间没有严格的物理上的顺序关系。

vector:可变长动态单端数组。可以随时增删元素,内存空间连续,随机访问速度快。

deque:双端队列,首尾均可高效插入和删除,随机访问速度快,元素在内存中非连续存储

list:双向循环链表,内存空间不连续,不支持随机访问,对于任意位置的插入和删除都很快速,操作后指针、迭代器、引用都不会失效。

forward_list:单链表,只支持单向访问,在链表任何位置进行插入删除操作都很快速

array:C++11新增的容器,比vector效率高,大小固定,无法动态扩展或收缩,只允许访问和替换存储的元素,使用要在std命名空间内

算法详解

定义:问题之解。利用有限的步骤解决数学问题。

分类质变算法非质变算法、排序算法、数值算法

<algorithm>:所有STL头文件中最大的一个(尽管它很好理解),它是由一大堆模版函数组成的,可以认为每个函数在很大程度上都是独立的,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。

<numeric>:体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。

<functional>:定义了一些模板类,用以声明函数对象。

迭代器详解

定义:容器算法耦合剂。提供可以依序寻访某个容器的各个元素的方法,无需暴漏容器内部表示。迭代器种类如下图所示:

分类

基本操作:*it:引用迭代器it,返回指向迭代器当前元素的引用;it++或++it:将迭代器it后移一位;it--或--it:将迭代器it前移一位;vector <int> :: iterator it 即声明了一个vector的迭代器it

仿函数详解

定义:是类似函数的对象,可以像函数一样被调用,接受参数并返回结果;也是一种类对象,重载函数调用运算符 operator(),通过重载该运算符,可以使得对象可以像函数一样被调用,并对传入的参数进行处理和操作;具有内部状态,可在多次调用之间保持状态信息,可在算法中存储额外信息,不仅仅是参数。

分类

内建仿函数,算术类:加plus、减minus、乘multiplies、除divides、取模modulus,关系类:等于equal_to、不等于not_equal_to、大于等于greater_equal、小于less_equal,逻辑类:与logical_and、或logical_or、非logical_no,一元仿函数(Unary Functor):接受一个参数,并对其进行操作,二元仿函数(Binary Functor):接受两个参数,并对它们进行操作;

函数指针仿函数:一种将函数指针封装为函数对象的方式,以便可以像函数一样调用。它是由用户自定义的仿函数类,不属于STL提供的预定义函数对象。其中重载了函数调用运算符 operator() 来实现函数指针的调用。用户可以根据自己的需求定义一个函数指针仿函数,将特定的函数指针封装为函数对象,从而能够在算法中使用;

适配器仿函数:bind绑定函数对象的参数,function封装任意可调用对象(函数对象、函数指针、成员函数指针等),mem_fn将成员函数指针转换为函数对象,not1和not2对一元和二元谓词取反,logical_not对一元谓词取逻辑非,unary_negate和binary_negate对一元和二元谓词进行取反;

适配器详解

定义:设计模式,将一个类的接口转换为另一个类的接口,使得这两个类能够协同工作。

分类

stack:一个先进后出即LIFO的容器,将一个底层容器封装成栈的接口,提供push()、pop()、top()等操作,内部默认使用deque作为其底层实现容器,不支持随机访问、只允许在栈顶添加/删除元素;

queue:一个先进先出即 FIFO 的容器,将一个底层容器封装成队列的接口,提供了push()、pop()、front()、back()等操作,内部默认使用deque作为其底层实现容器,只有队头和队尾可以被访问,不能有遍历行为

priority_queue:在正常队列的基础上加了优先级,保证每次的队首元素都是优先级最大的,即默认从大到小的排序,底层通过堆来实现。

空间配置器

定义:用于动态分配和管理内存的组件,在底层提供了对内存的分配和释放操作,被用于支持各种容器和算法的内存管理需求

分类:allocator:一个泛型的空间配置器类,用于分配和释放单个对象的内存。它通过allocate()函数分配内存,并通过deallocate()函数释放内存,使用new和delete运算符来完成内存的分配和释放;allocator_traits:一个辅助类模板,用于访问空间配置器的属性和行为,提供了一些模板特化和类型别名,以便在使用空间配置器时进行适当的配置<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值