![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STL源码剖析
文章平均质量分 88
walkerkalr
学无止境,梦想不止
展开
-
STL之set和map
STL之set和map setset的特性是,所有元素都会根据元素的键值自动排序,set的键值就是实值,实值就是键值。set不允许两个元素相同。不能通过set的迭代器改变set的元素值,因为set元素值就是其键值,关系到set元素的排列规则。set::iterator被定义为底层RB-TREE的const_iterator。set和list拥有某些相同的性质:当客户端对它进行元素新增操原创 2014-04-15 08:36:51 · 892 阅读 · 0 评论 -
STL空间配置器
空间配置器标准规范规定,STL空间配置器是一个名为allocator的模板类,同时也规定了它的必要接口,也就是说allocator类定义形式如下。其中接口allocator::allocate(),allocator::deallocate(),allocator::construct,allocator::destory()这四个接口及其重要。所以我们这里主要分析这四个接口。此外,rebin原创 2014-03-27 12:54:47 · 1134 阅读 · 3 评论 -
STL算法之copy
STL算法之copycopy使用必须包含头文件由于copy进行的是复制操作,而复制操作不外乎assignment operator和copy constructor(copy算法用的是前者),但是某些元素型别用于的是trivial assginment operator,因此,如果能够使用内存直接复制行为(例如C标准函数memmove或memcpy),变能够节省大量时间。为此,SGI原创 2014-04-15 10:02:07 · 1304 阅读 · 0 评论 -
allocator::rebind详解
rebind的本质应该这么说:给定了类型T的分配器Allocator=allocator,现在想根据相同的策略得到另外一个类型U的分配器allocator,那么allocator=allocator::Rebind::other.之所以要提供rebind接口,是因为容器只知道模板参数名Allocator,而不知其具体实现,容器只知道这样三个事情:1、Alocator是T的分配器,但其内部实转载 2014-03-27 08:53:08 · 7195 阅读 · 0 评论 -
STL之priority_queue源码剖析
STL之priority_queue源码剖析heap在探讨priority_queue之前,我们必须先分析heap。heap并不归属于STL容器,他是个幕后英雄,扮演priorityqueue的助手。顾名思义,priority queue允许用户以任何次序将任何元素推入容器,但取出时一定是从优先权最高的元素开始取。Binary max heap证据有这样的特性,适合作为priority_q原创 2014-04-02 21:07:37 · 2387 阅读 · 1 评论 -
STL之deque源码剖析
STL之deque源码剖析deque概述deque是一种那个双向开口的连续线性空间,其头尾端做元素的插入和删除效率比vector效率高很多。Deque和vector的最大差异,一在于deque允许常数时间内对头尾端进行元素插入或移除操作,二在于deque没有所谓容量概念,因为它是动态地分段连续空间组合而成,随时可以增加一段新的空间并链接起来。deque提供的迭代器也是RandomAcc原创 2014-04-02 19:38:39 · 1178 阅读 · 0 评论 -
STL之list源码剖析
STL之list源码剖析相较于vector,使用list的好处是每次插入或删除一个元素,就配置或释放一个元素的空间。list的节点:templatestruct __list_node{ typedefvoid* void_pointer; void_pointerprev; //型别为void*。其实可设为__list_node*原创 2014-04-01 17:01:28 · 861 阅读 · 0 评论 -
STL算法之sort
STL算法之sortSTL算的中的sort接受两个RandomAcceddIterators(随机存取迭代器)。STL的所有关系型容器都拥有自动排序功能(底层采用RB-tree),所有不需要用到sort算法。至于序列式容器stack,queue和priority-queue都有特别的出入口,不允许用户对元素排序。剩下的vector、deque和list,前两者的迭代器满足要求适合用sort算法原创 2014-04-16 11:32:54 · 751 阅读 · 0 评论 -
STL之Vector源码剖析
STL之Vector源码剖析vevtor与array非常相似,两者唯一差别在于空间运用的灵活性。array是静态空间,一旦配置了就不能改变;vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。vector的实现技术关键在于其对大小的控制以及重新配置时数据移动效率。一旦vector旧有空间满载,如果客户端每新增一个元素,vector内部知识扩充一个元素的空间,实为原创 2014-04-01 11:10:47 · 910 阅读 · 0 评论 -
STL之traits编程技法
迭代器概念与traits编程技巧迭代器:STL的中心思想在于:将数据容器和算法分开,彼此独立设计,最后再以一贴胶着剂将他们撮合在一起。这边是迭代器的功能。迭代器是一种行为类似指针的对象,而指针的各种行为中最常见也最重要的便是内容提领和成员访问,因此迭代器最主要的编程工作就是对operator*和operator->进行重载工作。关于这一点C++标注程序库有一个auto_ptr可供我们参原创 2014-03-31 20:42:15 · 1221 阅读 · 0 评论 -
STL之数值算法
STL之数值算法必须包含头文件#include #include #include #include #include //ostream_iteratorusing namespace std;int main(){ int ia[5] = {1,2,3,4,5}; vector iv(ia, ia+5); cout << accumulate(iv.begin原创 2014-04-15 09:10:13 · 829 阅读 · 0 评论 -
STL基本算法
STL基本算法基本算法:equal: 判断两个区间是否相等fill: 改填元素值fill_n: 改填元素值,n原创 2014-04-16 11:33:42 · 792 阅读 · 0 评论