摘要: 由于迭代器内对各种指针都进行了重载操作,所以各种指针运算如++,--等都不能直观视之,最关键的是缓冲区边缘的相关操作,可能需要 _M_set_node 跳一个缓冲区: 以下几个运算子保证了迭代器的正常运行,其中还涉及到相互调用,也不难理解: 阅读全文
posted @ 2017-05-10 20:00 Forever-Road 阅读(725) 评论(0) 推荐(0) 编辑
摘要: vector 是单向开口的连续线性空间,deque 则是一种双向开口的连续线性空间,也就是说deque能够在其容器两端分别做元素的插入和删除操作,vector 当然也可以从头尾两端进行操作,不过其头部插入或者删除元素的效率贼差,建议大家少用为妙。 deque 是连续空间,但是连续却是假象,实际上 d 阅读全文
posted @ 2017-05-10 19:33 Forever-Road 阅读(898) 评论(0) 推荐(1) 编辑
摘要: vector 容器的元素操作函数有很多,我就选取四个讲解一下,首先是pop_back()函数,pop() 函数的作用是将尾端元素拿掉并调整大小,并不涉及到容量的改变: ease() 函数作用是清除某一个元素,或者清除两个迭代器之间的所有元素,如下: 第二个 erase 示意图如下: insert函数 阅读全文
posted @ 2017-05-09 21:41 Forever-Road 阅读(9571) 评论(0) 推荐(0) 编辑
摘要: 咱们先来做一个测试capacity是容器容量,size是大小: 运行结果: 可以观察到每次容器满了需要扩容的时候,容量总是呈现两倍增长,而且每次扩容,容器第一个元素所在地址都会发生改变,由此我们知道,容器的扩容时实际是另外寻找一片更大的空间,VS的如下: 扩容的倍数不一样VS为1.5倍扩容,最好的扩 阅读全文
posted @ 2017-05-09 18:07 Forever-Road 阅读(1119) 评论(0) 推荐(0) 编辑
摘要: vecotr 一词原来的意思是:矢量,向量,航向,顾名思义指的就是类似于数组的一个存储数据的序列,因此所采用的数据结构非常简单:连续的线性空间,它以两个迭代器 _M_start 和 _M_finish 分别指向配置得来的连续线性空间中目前已被使用的范围,并以迭代器 _M_end_of_storage 阅读全文
posted @ 2017-05-09 16:45 Forever-Road 阅读(1751) 评论(0) 推荐(0) 编辑
摘要: 迭代器(iterators)是一种抽象的设计概念,23种设计模式中迭代器模式定义为:提供一种方法,使之能够依次巡访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表述方式。 在STL的实际运用中,迭代器扮演着重要的角色,STL的中心思想在于:将数据和算法分开,彼此独立设计,最后以一贴胶合 阅读全文
posted @ 2017-05-08 21:30 Forever-Road 阅读(1546) 评论(0) 推荐(0) 编辑
摘要: _S_chunk_alloc() 函数负责从内存池取出空间给free-list,如果内存池内存充足,则直接拿出足够的内存块给自由链表,如果内存不够所有需求但是对一小块需求能满足,则拿出一小块内存给自由链表并返回,如果一点儿内存也没有,则进行遍历压榨,最终如果真的没有,就只能求助于第一级配置器。代码如 阅读全文
posted @ 2017-05-07 10:26 Forever-Road 阅读(377) 评论(0) 推荐(0) 编辑
摘要: 1、第二级配置器的空间配置函数:allocate() __default_alloc_template 拥有配置器的标准接口函数 allocate(),毫无疑问,该函数首先得判断区块大小,大于128bytes就是用第一级配置器,小于或者等于128bytes 就检查对应的free-list,如果 fr 阅读全文
posted @ 2017-05-04 21:21 Forever-Road 阅读(443) 评论(0) 推荐(1) 编辑
摘要: SGI STL 第二级配置器使用的是memory pool,即内存池,相比较于第一级空间配置器,第二级空间配置器多了许多限制,主要是为了防止申请小额区块过多而造成内存碎片。当然小额区块在配置时实际上是对空间配置器效率的一种伤害。另外,索求任何一块内存,都得需要一些额外内存来进行标记,虽然这些标记占内 阅读全文
posted @ 2017-05-04 20:20 Forever-Road 阅读(600) 评论(0) 推荐(0) 编辑
摘要: 当operator new无法满足某一内存分配需求时,它会抛出异常。以前它会返回一个null指针,某些旧式编译器目前也还那么做。当operator new抛出异常以反映一个未获满足的内存需求之前,它会先调用一个客户指定的错误处理函数,一个所谓的 "new-handler",当然operator ne 阅读全文
posted @ 2017-05-04 19:15 Forever-Road 阅读(511) 评论(0) 推荐(0) 编辑