前言 上一节只分析了第二级配置器是由多个链表来存放相同内存大小, 当没有空间的时候就向内存池索取就行了, 却没有具体分析内存池是怎么保存空间的, 是不是内存池真的有用不完的内存, 本节我们就具体来分析一下 内存池 static data template的初始化 这里代码注释写的很清楚了, 我就提取 ...
分类:
其他好文 时间:
2018-12-10 00:44:09
阅读次数:
299
一、STL简介 STL提供六大组件,彼此可以组合套用: 二、关于容器的一些问题 2.1 当vector的内存用完了,它是如何动态扩展内存的?它是怎么释放内存的?用clear可以释放掉内存吗?是不是线程安全的? 2.2 map是怎么实现的?查找的复杂度是多少?能不能边遍历边插入? 红黑树和散列 O(l ...
分类:
其他好文 时间:
2018-11-06 22:23:06
阅读次数:
196
list源码1(参考STL源码--侯捷):list节点、迭代器、数据结构 list源码2(参考STL源码--侯捷):constructor、push_back、insert list源码3(参考STL源码--侯捷):push_front、push_back、erase、pop_front、pop_b ...
分类:
其他好文 时间:
2018-11-05 13:36:45
阅读次数:
191
list的push_back、insert的使用如下: #include<bits/stdc++.h> using namespace std; int main() { int i; list<int> l; cout<<l.size()<<endl; //0 l.push_back(1); l. ...
分类:
其他好文 时间:
2018-11-01 21:07:30
阅读次数:
185
list概述 list相对于vector复杂得多,list是一个双链表,对于插入元素、删除元素,list都相对比较简单 list节点 list迭代器 list迭代器必须有能力指向list的节点,并有能力进行正确的递增、递减、取值、成员存取等操作,同时list是双向链表,迭代器必须具备前移、后移的能力 ...
分类:
其他好文 时间:
2018-10-28 20:51:36
阅读次数:
238
参考:《STL源码剖析》第6章 算法 include include include / / template T accumulate(InputIterator first, InputIterator last, T init) { for (; first != last; ++first) ...
分类:
编程语言 时间:
2018-10-09 20:03:20
阅读次数:
167
一、概述 SGI STL有两级空间配置器:标准空间配置器std::allocator和特殊空间配置器std::alloc。 二、标准空间配置器std::allocator 之所以称之为"标准"是因为它直接使用了::operator new和::operator delete来进行内存分配,在效率上表 ...
分类:
其他好文 时间:
2018-09-26 17:10:36
阅读次数:
195
1. GOF 迭代器设计模式 前面一篇文章有写到stl_list的实现,也实现了一下相应的iterator,但是后面觉得,实现具体容器之前有必要介绍一下iterator(迭代器) 。那么迭代器是什么呢? GOF的设计模式是这样定义的: 提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的 ...
分类:
其他好文 时间:
2018-09-26 01:19:35
阅读次数:
244
vector源码1(参考STL源码--侯捷) vector源码2(参考STL源码--侯捷) vector源码(参考STL源码--侯捷) 空间分配导致迭代器失效 vector的构造和内存管理 vector所采用的数据结构非常简单:线性连续空间,它是由两个迭代器start和finish分别指向配置得来的 ...
分类:
其他好文 时间:
2018-09-10 11:12:44
阅读次数:
202
vector源码1(参考STL源码--侯捷) vector源码2(参考STL源码--侯捷) vector源码(参考STL源码--侯捷) 空间分配导致迭代器失效 vector概述 Vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间纳入新元素,vector的使用效率,关键在于其对大小的控 ...
分类:
其他好文 时间:
2018-09-10 11:11:36
阅读次数:
186