前言 上篇文章讲了 STL vector 泛化版本的实现,其采用普通指针作为迭代器,可以接受任何类型的元素。但如果用来存储 bool 类型的数据,可以实现功能,但每一个 bool 占一个字节(byte),而一个字节有 8 位(bit),这样就有点浪费了。所以 SGI STL 设计了一个特化版本的位向 ...
分类:
其他好文 时间:
2019-10-15 10:15:40
阅读次数:
112
模拟实现list即将list中的函数模拟实现,同样也分为五部分:构造与析构、容量、迭代器、元素访问、元素修改。需要注意的问题是list中的迭代器,与vector中不同的是list不是顺序结构,所以我们要对迭代器进行封装,其使用规则也要在这个封装中自定义给出。vector中的使用原生态指针即可。代码如下:#include<iostream>usingnamespacestd;namesp
分类:
其他好文 时间:
2019-10-15 09:34:58
阅读次数:
81
即使class完全不带virtual函数,被“non-virtual析构函数问题”给咬伤还是有可能的。举个例子,标准string不含任何virtual函数,但有时候程序员会错误的把它当做base class: 乍看似乎无害,但如果你在程序任意某处无意间将一个pointer to SpecialStr ...
分类:
编程语言 时间:
2019-10-14 10:24:38
阅读次数:
86
上节在学习第二级配置器时了解了第二级配置器通过内存池与自由链表来处理小区块内存的申请。但只是对其概念进行点到为止的认识,并未深入探究。这节就来学习一下自由链表的填充和内存池的内存分配机制。 refill()函数——重新填充自由链表 前情提要,从上节第二级配置器的源码中可以看到,在空间配置函数allo ...
分类:
其他好文 时间:
2019-10-13 17:08:52
阅读次数:
98
上节学习了内存配置后的对象构造行为和内存释放前的对象析构行为,在这一节来学习内存的配置与释放。 C++的内存配置基本操作是::operator new(),而释放基本操作是::operator delete()。这两个全局函数相当于C的malloc() 和free() 函数。而SGI正是以mallo ...
分类:
其他好文 时间:
2019-10-13 17:05:05
阅读次数:
78
适配器(adapters): 概念上类似于设计模式中的适配,此处STL中的适配器可对组件的组合、灵活运用扮演重要角色。 STL中适配器主要有:容器适配器、迭代器适配器、仿函数适配器 容器适配器: queue(先进先出)、stack(先进后出)、priority_queue(优先队列)适配器,即que... ...
分类:
其他好文 时间:
2019-10-13 15:12:37
阅读次数:
102
2153: D.ly的排队问题 Description 马上要上体育课了,上体育课之前总归是要排个队的,ly作为班长,怎么排队的问题只能由她来解决,但是马上要上课了,ly又不清楚所有人的身高,她又不好意思问每个人的身高,因为这样会显的自己很不负责,于是她只能通过肉眼观察...那么问题来了,她只能观察 ...
分类:
编程语言 时间:
2019-10-12 21:01:49
阅读次数:
111
浅谈归并排序 排序算法有很多,今天让我说一说: 冒泡选择和插入,希尔基数和堆桶; 还有快排很好写,STL大法没得说。 还有一个叫归并,时间稳定不爆锅。 —— 一个会说相声的博主的引言 相比于一些复杂度不太稳定的排序算法(比如快排,最坏的时候会退化成$O(n^2)$级别的)或者时间稳定但是本来就是$O ...
分类:
编程语言 时间:
2019-10-11 19:59:42
阅读次数:
79
第二道构造题 不把金华考生当人系列。 题解OJ上有,这里不赘述 关键是此题代码如果写的好只需50行,写的不好可能要200行。 这里给出100行的丑陋代码(懒人必备STL vector,省了很多代码) c include using namespace std; define go(i,a,b) fo ...
分类:
其他好文 时间:
2019-10-11 12:26:38
阅读次数:
72