
《STL源码剖析》
文章平均质量分 74
《STL源码剖析》学习笔记
拉车看路
低头拉车,抬头看路。
展开
-
【STL序列式容器】看看list的结构
与vector不同,list的底层是用双向链表实现的,其逻辑上连续的元素并不是地址连续的。list每插入或删除一个元素,就配置或释放一个元素的空间,内存利用率较高。对于任意位置上元素的插入或删除操作,永远是常数时间。vector的是O(n)。原创 2022-02-26 10:49:17 · 755 阅读 · 0 评论 -
【STL序列式容器】剖析vector
C++语言本身提供了一个序列式容器array,array是静态空间,一旦配置了就不能改变,类似于C语言的数组。vector的数据安排以及操作方式与array很像,但vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。原创 2022-02-25 20:34:25 · 552 阅读 · 0 评论 -
【迭代器】迭代器相应型别
迭代器相应类型有五种,`iterator_traits`类专门用来“萃取”迭代器的特性。原创 2022-02-22 23:38:14 · 1424 阅读 · 0 评论 -
【空间配置器】内存基本处理工具
STL定义了五个全局函数,作用于未初始化的内存上。它们分别是construct()、destroy()、uninitialized_copy()、uninitialized_fill()和uninitialized_fill_n()。原创 2022-02-20 00:24:12 · 247 阅读 · 0 评论 -
【空间配置器】空间的申请和释放
文章目录两级配置器allocateSTL的实现有多个版本,其中SGI被GCC所采用。SGI属于open source的一员,但不属于GNU GPL。SGI STL的配置器的名称是alloc,每一个容器的实现都指定了其缺省的空间配置器为alloc。alloc不接受任何模版型别参数。template <class T, class Alloc = alloc>class vector { ... };C++的内存配置(申请)的基本操作是::operator new(),内存释放的基本操作原创 2022-02-19 21:09:03 · 218 阅读 · 0 评论 -
【空间配置器】构造和析构
文章目录构造对象析构对象版本1版本2空间配置器为STL容器分配存储数据的空间,空间不一定是内存,也可以是磁盘或其它辅助存储介质。一般而言,我们所习惯的C++内存配置操作和释放操作是这样的:class Foo { ... };Foo *pf = new Foo;delete pf;这其中的new包含两步操作:(1)调用::operator new配置内存;(2)调用Foo::Foo()构造对象。delete也包含两步操作:(1)调用Foo::~Foo()将对象析构;(2)调用::ope原创 2022-02-16 20:21:13 · 466 阅读 · 0 评论 -
为单链表实现一个迭代器
文章目录迭代器概念迭代器和指针单链表的迭代器实现测试迭代器概念迭代器是一种抽象的设计概念,程序设计语言中并没有与之对应的实物。《设计模式》中对迭代器模式的定义如下:提供一种方法,使之能够依序巡访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表述方式。STL的中心思想是:将数据容器和算法分开,彼此独立设计,最后再使用胶着剂把他们撮合在一起(迭代器扮演胶着剂)。如Find函数通过迭代器访问容器内的数据,而不关心数据是如何表示的。#include <vector>#includ原创 2022-02-13 12:06:39 · 1322 阅读 · 0 评论