C++ STL


前言

本文介绍了C++ STL,基于施磊老师的C++课程。


一、vector容器

需要注意的有两点:
1、迭代器失效问题
在这里插入图片描述

2、reserve和resize的区别,size和capacity的区别:
在这里插入图片描述

二、deque容器和list容器

deque容器,即双端队列容器。其底层数据结构是一个动态开辟的二维数组,一维数组从2开始,以2倍的方式进行扩容,每次扩容后,原来的第二维数组,从新的第一维数组的下标oldsize / 2开始存放,上下都预留相同的空行,方便支持deque的首尾元素添加。

在这里插入图片描述
在这里插入图片描述

list容器,即链表容器。其底层数据结构是一个双向链表。
在这里插入图片描述

三、vector、deque、list对比

注意vector和deque的区别,在中间进行insert或者erase时,deque更加麻烦
在这里插入图片描述

四、容器适配器

适配器底层没有自己的数据机构,他是另外一个容器的封装,他的方法全部由底层依赖的容器实现。如STL中stack容器的实现,底层依赖于deque容器。

Q1:为什么stack和queue的底层不用vector实现呢?
1、vector的初始内存使用效率太低了
2、对于queue来说,需要支持尾部插入、头部删除;使用vector效率很低
3、deque的内存利用率更高

Q2:为什么priority_que的底层为什么用vector不用deque?
大根堆的使用需要计算元素之间的下标关系,使用deque不能快速计算某个节点的左右孩子节点

五、函数对象

C++的函数对象对应C语言的函数指针,我们将有operator()小括号运算符重载函数的对象,称作函数对象或者仿函数。

通过函数指针调用函数,没有办法进行内联,效率很低,因为有函数调用开销。
而通过函数对象调用,可以根据对象确定调用具体的函数从而能在编译阶段确定是否内联。

函数对象的优势:
在这里插入图片描述

六、泛型算法和绑定器

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值