C++进阶之路《迭代器》

迭代器的特点

1.迭代器从头到尾进行迭代,具有比较能力,自加(向后走的能力)能力。即就是提供一种方式依次访问容器内的各个元素又不暴露容器内部的表达方式
2.STL的中心思想是将容器和算法分离:算法和容器之间的关联就是迭代器
3.迭代器是一个智能指针:迭代器只重载了 ’ * ’ 和 ’ -> ',并没有在迭代器的析构函数中将所指之物析构
在这里插入图片描述

迭代器具有的能力

1.值能力:迭代器在迭代容器时不光要访问内部数据,还需要知道此数据的类型是什么
2.迭代器的相差型别:计算俩个迭代器之间的差值,有正有负,因此该差值是一个整型类型。代表了这俩个迭代器之间有多少个元素
3.引用类型:迭代器所指之物是否允许改变
4.指针类型:迭代器所指之物的地址要找到
5.迭代器的相应型别:

  • vector/deque:随机迭代器,
  • 顺序迭代器,
  • list/map/set:双向迭代器,
  • unordered map:正向迭代器(单向迭代器:只能向前走,不能倒退)
    在这里插入图片描述

迭代器分类的用处:对于不同类型的迭代器必须采取不同的策略
对于随机迭代器移动n次
在这里插入图片描述
对于顺序迭代器连续移动n次
在这里插入图片描述

二级配置器

用户所需要的内存块大于128,系统认为足够大因此调用一级配置器;用户申请空间小于128,系统任务足够小就调用内存池来进行。堆区的管理方式与其类似:小块内存存取系统直接从内存池分配;大块内存存取直接从系统取

在这里插入图片描述
如果开放二级配置器,首先从二级配置器中获取空间,如果申请内存小于128课可直接从内存池中取,大于128则转向一级配置器

在这里插入图片描述

一级配置器工作原理:
1.进入主函数先抢夺一块空间
2.将fun这个内存释放函数注册进去
3.当调用malloc时如果空间足够直接走人;
如果malloc没有从堆区获取到空间调用oo_malloc;
oo_malloc获取注册函数,注册函数不为空时调用注册函数;
调用注册函数的目的是释放出更多的内存;
然后把当前的注册函数指针置为空;
回到oo_malloc重新进行内存申请

内存泄漏关键的2个点:
1.丢失了内存的地址
2.随着程序的运行对堆区的使用量在不断进行请求,最终堆区的空间耗完了

内存池不会造成内存泄漏。因为内存池分配出的每一个块,要么给了用户,要么连接在内存池的自由链上。用户不使用了就会还给内存池。因此只要不丢失块的地址就不会造成内存泄漏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值