- 博客(5)
- 收藏
- 关注
原创 《STL源码剖析》-学习笔记05-deque设计思想
deque采取一段被称为map(不是map容器)的主控中心,map是一段连续的空间,其中存储着一些指针,这些指针指向了不同的内存,当对deque进行操作时,通过这些指针间接地操作它指向的空间,以此来实现逻辑上的连续空间。deque表面上是一段内存连续的可双端操作的容器,但设计时是用一段一段内存和复杂的迭代器结构来实现这种“连续”的空间。deque类内包含元素T,指向T的pointer,指向pointer的map。如果想要增删改查元素,便可间接通过 迭代器和中控器操作一块物理上连续的空间。
2023-06-02 20:18:39
90
原创 《STL源码剖析》-学习笔记03-traits编程在迭代器内部函数实现时的使用
首先需要明确,定义一个迭代器时,为了防止出现注意不到的错误,大多数情况会继承自标准库中的std::iterator,但此iterator纯粹是类型定义,不会产生内存开销。这样,通过实现重载的__distance()函数,便可实现distance函数识别迭代器类型来调用不同__distance()函数的重载版本,提高效率。上一文章写出了traits编程的设计思想,本文会列出它在迭代器内部获取两迭代器之间距离函数distance()的功效和注意点。
2023-05-27 17:54:29
42
1
原创 《STL源码剖析》-学习笔记02-traits编程
在最上方的代码里,由代码的意思可得我其实是默认了迭代器I为一个“类”,这样才能取到它的成员变量value_type用于指定该迭代器所属的容器类别,但是迭代器并不一定是类,还有可能是原生指针,原生指针当然是不包含成员变量的。其中第一个类的作用为:在声明下面的模板函数的返回值时,指定返回值类型value_type为类模板I的成员变量(需要这样做的原因是,模板是在编译器具现化之后才能被推导出具体的类型,在此之前编译器并不知道value_type是一个成员变量,成员函数或者其他东西)。但实际上它可以解决以下问题。
2023-05-26 21:29:29
50
1
原创 《STL源码剖析》-学习笔记01-placement new
placement “new” 可以在用户已经声明过的内存上构建新的对象,此操作只会调用对象的构造函数,并不会产生新的内存,并且可以避免内存碎块问题。值得注意的是,foo类的内存大小为4,成员函数不占用类的空间,所以能够直接使用new为int分配的大小为4的空间。其中address为地址,可传入一个指针,ClassConstructor顾名思义为构造函数。
2023-05-26 20:58:21
49
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人