STL源码剖析学习记录
取名太麻烦了
这个作者很懒,什么都没留下…
展开
-
关于STL中value_type函数的思考
// 摘自stl_iterator_base.htemplate <class _Iter>inline typename iterator_traits<_Iter>::value_type*__value_type(const _Iter&){ return static_cast<typename iterator_traits<_Iter>::value_type*>(0);}《STL源码剖析》上说的是value_type这.原创 2021-07-12 15:40:16 · 1179 阅读 · 0 评论 -
关于STL中空间配置器中free_list的理解
freeList是一个元素类型为obj*的数组,freeList[i]代表着一串内存区块链表(注,为了方便说明,把这里的一大块空间称为一个链表,因为它有着与链表类似的表现形式,为了更好的突出链表的形式,上图中的两个区块没有连接在一起。实际上这一块空间是连续的,而链表中的两个节点在内存上不一定是连续的,需要注意)的首地址,每串区块的区块大小是不同的。假设freeList[0]代表一串区块大小为8的区块串,则它有可能是如下的形式可以看出,在一个区块链表中,每两个obj 对象之间的首地址的差值为一个区块的原创 2021-07-07 22:44:42 · 2651 阅读 · 3 评论 -
c++ primer 9.37为什么list或array没有capacity成员函数
vector容器是有capacity成员函数的,原因是vector需要支持通过索引对元素的随机存取功能,因此需要分配一块地址连续的内存空间,由于push_back()这样的操作,如果在push_back()操作时为新元素分配空间,则不能保证此时分配的空间与先前的空间是地址连续的,如果为已有的元素和现在新加入的元素重新分配一块连续的空间,再进行拷贝,则十分缓慢。综上,vector在实现时总是会多分配一些空间,作为预留的空间。回归正题,由于list不要求对元素的随机存取,因此不用额外分配空间,也就没有cap原创 2021-07-04 19:59:44 · 290 阅读 · 0 评论 -
forward_lsit的erase操作为什么是删除指定的迭代器之后的元素
问题描述:在forward_list的这个容器中,没有erase接口,只提供了erase_after这个接口。其中erase _after(p)为删除迭代器p指向的位置之后的一个元素。那么为什么不能直接删除当前迭代器指向的元素呢。首先找到STL中slist.h,可以看到iterator erase_after(iterator __pos) { return iterator((_Node*) this->_M_erase_after(__pos._M_node)); }于是原创 2021-07-04 18:27:03 · 153 阅读 · 0 评论