STL
本专栏简述C++标准库STL
哎呦,帅小伙哦
这个作者很懒,什么都没留下…
展开
-
std::vector<bool>
std::vector这是一项专门std::vector针对空间效率(有争议)的专业化。但是,它的行为与常规相似但并不相同std::vector。这主要归因于这样的事实:std::vector它不是通常的C++标准库意义上的容器,而是一个位数组。 std::vector和常规vector之间的一些区别std::vector是:std::vector::iterator 不是随机访问迭代器.std::vector 不需要将其元素存储为连续数组.std::vector公开class std::vector原创 2021-09-02 12:04:08 · 919 阅读 · 0 评论 -
map[]和map.at()取值之间的区别
注意,aMap是map类的对象,通过aMap[key]取值和通过aMap.at(key)取值的区别如下:aMap[key]如果key不存在会添加key,不会抛出异常;aMap.at(key)会检查key,如果不存在会抛出异常。原创 2020-08-10 21:01:16 · 3993 阅读 · 0 评论 -
关联式容器——hash_map和hash_multimap
hash_map STL map多半以RB-tree为底层实现。SGI则是在STL标准规格之外又提供了一个所谓的hash_map,以hash_table为底层实现机制。由于hash_map所提供的操作接口,hashtable都提供了,所以几乎所有hash_map操作行为,都只是调用hashtable的操作而已。运用map,为的是能够根据键值快速搜寻元素。这一点,不论底层是红黑树还是...原创 2020-05-07 20:07:57 · 275 阅读 · 0 评论 -
关联式容器——hash_set和hash_multiset
hash_set STL set多半以RB-tree为底层实现。SGI则是在STL标准规格之外又提供了一个所谓的hash_set,以hash_table为底层实现机制。由于hash_set所提供的操作接口,hashtable都提供了,所以几乎所有hash_set操作行为,都只是调用hashtable的操作而已。但是需要注意的是红黑树有自动排序功能而哈希表没有,所反应出来的结果就是,se...原创 2020-05-07 18:03:45 · 233 阅读 · 0 评论 -
hashtable(散列表)的原理即代码实现
hashtable可提供对任何有名项的存取操作和删除操作。由于操作对象是有名项,所以hashtable也可被视为一种字典结构。这种结构的用意在于提供常数时间的基本操作。 hash function(散列函数):其作用是通过散列函数把元素的key映射成一个合理的索引。可能会有不同的元素被映射到相同的位置,这是无法避免的,这就是所谓的碰撞问题。解决碰撞的方法有很多种:线性探测、二次探...原创 2020-05-07 15:35:07 · 231 阅读 · 0 评论 -
关联式容器——map和multimap
map map的特性是,所有元素都会根据元素的键值自动被排序。map的所有元素都是pair,同时拥有实值(value)和键值(key)。pair的第一元素被视为键值,第二元素被视为实值。map不允许两个元素拥有相同的键值。 我们不能通过map的迭代器修改map的键值,但是可以通过迭代器修改map的实值,因为红黑树的底层只提供了插入和删除操作的自平衡,并没有提供这种修改键值的自平...原创 2020-05-06 16:59:25 · 199 阅读 · 0 评论 -
关联式容器——set和multiset
set set的特性是,所有的元素都会根据元素的键值自动排序。set的元素不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值。set不允许两个元素拥有相同的键值。 不能通过set的迭代器改变set的元素值,因为set元素的值就是其键值,关系到set元素的排列规则。如果任意改变set元素值,会严重破坏set组织。...原创 2020-05-06 14:51:13 · 141 阅读 · 0 评论 -
红黑树原理及代码实现
#include <iostream>using namespace std;enum Color{Red, Black};template <typename T>struct rbNode{ T data; Color color; rbNode<T>* left; rbNode<T>* right; rbNode<...原创 2020-05-04 18:51:11 · 239 阅读 · 0 评论 -
序列式容器——priority_queue
priority_queue的底层是用vector实现的,因此严格意义上讲,priority_queue属于容器适配器。在介绍序列式容器之前,先介绍heap。heap的定义(以大根heap为例)是递归定义:max heap或是一棵空树 或是具有以下性质:max heap的左右子树的所有节点都是小于根节点的,其左子树和右子树也是max heap。 heap就是一种完全二叉树,也...原创 2020-04-28 16:26:09 · 182 阅读 · 0 评论 -
序列式容器——deque、stack、queue
deque deque和vector的最大差异,一在于deque允许于常数时间对头端进行插入和删除操作,二在于deque没有所谓容量(capacity)观念,换句话说,像vector那样“因旧空间不足而重新配置一块更大空间,然后复制元素,再释放空间”这样的事情在deque是不会发生的。除非必要,我们尽可能的使用vector而非deque,对deque进行的排序操作,为了最高效率,可将...原创 2020-04-27 20:49:08 · 271 阅读 · 0 评论 -
序列式容器——list
相比较vector的连续线性空间,list就显得复杂很多,它的好处是每次插入或者删除一个元素,就配置或者释放一个元素空间。因此,list对于空间运用有绝对的精准,一点也不浪费。而且对于任何位置的元素插入和元素移除,list永远是常数。 list本身和list节点是不同的结构,需要分开设计。 下面是list节点的结构:template<typename T>...原创 2020-04-23 21:36:16 · 153 阅读 · 0 评论 -
STL——适配器
1,adapter可以把某些已经存在的东西改造一下,比如把接口改一改,把三个参数的变成两个参数的;把一个函数的名称改一下,adapter通常都是这么使用的。根据adapter改造的东西可以把adapter分为三种,第一种交容器适配器,第二种叫迭代器适配器,第三种叫仿函数适配器。假设a改造B之后,a就代表的B,a就可以供大家使用而不会看到B,但是a所做的事情会交给b去做(两种做法,一种是继承的方法,...原创 2020-03-17 21:29:30 · 150 阅读 · 0 评论 -
STL——仿函数
1,仿函数只为算法来服务。仿函数,由名字可以确定是模仿函数的意思,因此必须要重载()。这样创建出来的对象是一个对象,像一个函数,因此叫做仿函数。2,struct plus:public binary_function<T, T, T>继承模板库的函数,因为这是可以使用适配的条件,有些时候不继承也可以完成某些功能,不继承可以完成的功能,继承以后一定可以完成,继承以后能完成的功能,不继...原创 2020-03-08 10:06:06 · 344 阅读 · 0 评论 -
STL——迭代器
1,因为Iterator要模拟指针,STL中除了vector和array中的Iterator之外,其他容器的指针都是一个类,因为Iterator需要模拟指针,又因为指针需要大量的+-*/操作,因此Iterator里面必然具有大量的运算符重载。2,Iterator_traits的作用是把迭代器的特征萃取出来。例如Iterator_traits<_Iter>::iterator_cat...原创 2020-03-07 13:43:15 · 179 阅读 · 2 评论 -
STL——分配器和一些基础知识
1,分配器是给容器用的,分配器的效率好不好就会影响到容器的效率好不好。即使可以使用分配器,也不建议使用分配器,因为使用分配器进行空间释放时,会要求程序员确定需要释放多少内存。分配器基本上最后都需要调用operator new这个函数。operator new又会调用malloc函数。2,注意,我们使用malloc分配内存的时候,系统分配的总内存会比想要申请的大。因为会有一些头部信息是需要加上的...原创 2020-03-06 20:04:56 · 340 阅读 · 0 评论 -
STL——容器
1,学习各种容器的原理不是那个困难,重要的是要掌握容器在内存中是如何存储的。2,容器从逻辑上可以分为序列式容器和关联式容器。关联式容器原创 2020-03-03 10:08:10 · 237 阅读 · 0 评论 -
STL体系结构基础介绍
1,首选来明确学习STL的目标,分为四个阶段: 第一阶段:使用C++标准库 第二阶段:认识C++标准库(胸中自由丘壑) 第三阶段:良好的使用C++标准库 第四阶段: 扩展C++标准库 一般来讲,达到第三种标准已经是很不错的programer了。2,STL的六大部件:容器,分配器,算法,迭代器,适配器,仿函数。 容器用来存放数据,非常好的...原创 2020-03-02 15:44:05 · 329 阅读 · 0 评论