草庐IT

stl_algobase

全部标签

<一>C++ STL

STL(standardtemplatelibaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。通俗来说:STL就是将常见的数据结构(例如顺序表,链表,栈,队列,二叉树,哈希...)以模板的形式进行封装,使用时,不用我们人为再去写,可以直接调用。并且包含常见的通用的泛型算法(一些常规的算法也不用自己实现,可以直接调用)通用的泛型算法两大特性:通用的:对于任意类型的数据结构都可以处理。(线性表,链表,二叉树....)模板实现:以模板的方式实现,对于任意数据类型都可以处理。(int/double/short/long.....)

C++的SGI版本的STL二级空间配置器实现(基于内存池的实现方式)

C++STL中的空间配置器只有一种,是同过底层的malloc和free实现的,空间配置器中有四种方法:SGISTL中有两种空间配置器,一级allocator是与stl一致的malloc和free的方式,二级allocator是通过内存池的方式实现的。SGISTL中的vector容器的模板中用到了空间配置器,默认用的是二级allocator。该容器底层存储对象的构造和析构是通过全局的函数模板construct和destroy实现的。这里我们着重研究allocator中的allocate和deallocate方法。allocate://breaksifwemakethesetemplateclas

C++的SGI版本的STL二级空间配置器实现(基于内存池的实现方式)

C++STL中的空间配置器只有一种,是同过底层的malloc和free实现的,空间配置器中有四种方法:SGISTL中有两种空间配置器,一级allocator是与stl一致的malloc和free的方式,二级allocator是通过内存池的方式实现的。SGISTL中的vector容器的模板中用到了空间配置器,默认用的是二级allocator。该容器底层存储对象的构造和析构是通过全局的函数模板construct和destroy实现的。这里我们着重研究allocator中的allocate和deallocate方法。allocate://breaksifwemakethesetemplateclas

八、C++STL 6大组件-你必知必会的编程利器

STL这部分推荐直接看《C++primer》的9到11章内容,有非常详细的接口列表,还有很多例子。附录里还有常用的泛型算法,适合经常看一下vector容器底层数据结构:动态开辟的数组,每次以原来空间大小的2倍进行扩容的vectorvec;deque双端队列和list链表初始的元素放在队列的中间,方便后续添加元素。外部有一个mapper保存队列,队满的时候会对mapper扩容,队列放在扩容后的mapper的sizeof(原来mapper)/2的位置。deque容器:list容器:vector、deque、list对比vecotr和deque之间的区别?deque底层内存是否是连续的?不是。deq

八、C++STL 6大组件-你必知必会的编程利器

STL这部分推荐直接看《C++primer》的9到11章内容,有非常详细的接口列表,还有很多例子。附录里还有常用的泛型算法,适合经常看一下vector容器底层数据结构:动态开辟的数组,每次以原来空间大小的2倍进行扩容的vectorvec;deque双端队列和list链表初始的元素放在队列的中间,方便后续添加元素。外部有一个mapper保存队列,队满的时候会对mapper扩容,队列放在扩容后的mapper的sizeof(原来mapper)/2的位置。deque容器:list容器:vector、deque、list对比vecotr和deque之间的区别?deque底层内存是否是连续的?不是。deq

C++ STL stack

#include头文件usingnamespacestd;作用这个很清楚了,FILO运用在:括号匹配、波兰式计算问题上(未完待续)创建template>classstack;一个参数,默认使用deque容器stack>两个参数,使用自定义的数据结构,如:liststack>mystack;vectorstack>mystack;listvalues{1.414,3.14159265,2.71828};stack>my_stack(values);拷贝构造函数stack>copy_stack{my_stack};成员函数sizesize_typesize()const;//Membertypes

C++ STL unordered_map

#include头文件usingnamespacestd;作用无序map容器。以pair形式存储数据。pair在#include头文件中定义。pair:pair其实就是数据结构与算法课写的Record类型对比mapmap内部利用红黑树原理默认实现了key值的递增排序;unordered_map是无序的;创建时unordered_map更耗时,但查询速度更快;创建unordered_maphashmap;前两个必填,最多四参数。template,//unordered_map::hasherclassPred=equal_to,//unordered_map::key_equalclassAll

C++ STL stack

#include头文件usingnamespacestd;作用这个很清楚了,FILO运用在:括号匹配、波兰式计算问题上(未完待续)创建template>classstack;一个参数,默认使用deque容器stack>两个参数,使用自定义的数据结构,如:liststack>mystack;vectorstack>mystack;listvalues{1.414,3.14159265,2.71828};stack>my_stack(values);拷贝构造函数stack>copy_stack{my_stack};成员函数sizesize_typesize()const;//Membertypes

C++ STL unordered_map

#include头文件usingnamespacestd;作用无序map容器。以pair形式存储数据。pair在#include头文件中定义。pair:pair其实就是数据结构与算法课写的Record类型对比mapmap内部利用红黑树原理默认实现了key值的递增排序;unordered_map是无序的;创建时unordered_map更耗时,但查询速度更快;创建unordered_maphashmap;前两个必填,最多四参数。template,//unordered_map::hasherclassPred=equal_to,//unordered_map::key_equalclassAll

【速记】C++ STL自定义排序

因为是“速记”,难免会有不完善的地方。这篇笔记咱日后应该还会进行补充。关于sort的比较函数voidsort(RandomItfirst,RandomItlast,Comparecomp);STL的algorithm库中的sort函数,可以接受一个comp函数作为第三个参数,用来指定排序的规则。自定义sort比较函数comp(a,b)函数的返回值是一个bool值,当返回值为true时不改变元素顺序,反之则需要调换元素。可以把其中的a看作序列中前一个位置的元素,b看作后一个位置的元素:如果a的时候comp(a,b)=true,那么a就会被放在b前面,排序呈升序。如果a的时候comp(a,b)=f