STL
侯捷老师的B站课程笔记
sheeper200626
这个作者很懒,什么都没留下…
展开
-
rb_tree&Hash_table
1、rb_tree(1)平衡二分搜索树(balanced binary search tree)(2)通过key进行排序,允许data改变,不改变key(3)key是否能重复取决于需求,insert_unique()和insert_equal()2、hash_table实现原理:加入有一个篮子,存储空间长度为53存入的值为[59,63,108,2,53,55]如何存入bucket中呢?val%53 = key例如:val = 59;它对应的key = 59%53 = 6;所以59存在原创 2020-09-16 15:02:28 · 99 阅读 · 0 评论 -
STL:map
1、RBTree中保存的树结点结构pair<class T1,class T2>{T1 first;T2 second}mep中的iterator指向的就是这种结构体,所以可以通过iterator访问key(first)和value(second)。而插入操作也是插入pair这个结点。上图显示插入的是节点pair<…>& val,注意插入操作中,由于红黑树自身的性质可以自己排好序,所以自动给的节点key插入。emplace可是插入,但是与insert输入形式不同,原创 2020-07-24 21:36:08 · 101 阅读 · 0 评论 -
第六讲:算法源代码剖析(例子)
template<typename Iterator>Algorithm(Iterator itr1,Iterator itr2){ .....}template<typename Iterator,typename Cmp>Algorithm(Iterator itr1,Iterator itr2,typename Cmp){ .....}1、算法accumulate(累计的意思)//版本1template<class InputIterator,原创 2020-06-30 13:03:15 · 398 阅读 · 0 评论 -
第五讲:迭代器的分类及对算法的影响
一、C++标准库的算法是什么东西?template<typename Iterator>Algorithm(Iterator itr1,Iterator itr2){ .....}template<typename Iterator,typename Cmp>Algorithm(Iterator itr1,Iterator itr2,typename Cmp){ .....}algorithm问iterator:“你到哪了?你那个地方有什么东西?”iter原创 2020-06-29 21:56:08 · 228 阅读 · 0 评论 -
第四讲:分配器及容器
一、分配器allocators(STL六大部件之一,幕后英雄)先谈谈:operator new()malloc() :memory allocation,分配内存可能大家只听说过new,没听过operator new,但是到最后都会归纳到这。小结:不同编译器的标准库都是用malloc和free来实现分配器,vc、bc、Gc都一样。malloc会带来额外开销,alloc实现为有一个16个的空间,每个空间从左到右为8byte成倍数的单向链表,在给容器分配内存的时候,alloc会根据容器需求的内存原创 2020-06-29 16:07:40 · 182 阅读 · 0 评论 -
第三讲:分配器及源代码值之分布
一、使用分配器(allocator)前面讲的容器都是通过分配器分配的内存空间保存数据。每一个容器的声明都是模板,其中第二模板型别参数都是分配器。Q:到底有哪些分配器呢?A:分配器都是放在ext扩充器之下,结论:不建议用分配器去保存数据,建议用容器。二、内核分析(就是源码)源码之前 ,了无秘密为了用好容器,需要了解内核,这个源码是宝库,我们能学到很多技巧。基础要求:C++基本语法、模板基础、数据结构和算法标准库版本,VisualC++Q:如何找到源代码面向对象是类、类以及之间的继原创 2020-06-27 16:15:15 · 136 阅读 · 0 评论 -
第二讲:容器分类与各种测试
一、容器分为序列容器、关联容器、不定续容器不定续容器:在数据存入容器中,位置不确定序列容器://都有一定的次序,按照放进去的次序array 用key来找value就非常快,所以比较适合查找。vectorDeque:双向List:双向链表Forward-List:单向链表关联容器::set/mutiset:集合,内部是通过红黑树(RBTree)实现的。原本是并没有限定用什么数据结构来做set,但是因为RBTree效果好,所以各家编译器构会用其实现。Map/Multimap:key&原创 2020-06-27 11:30:20 · 222 阅读 · 0 评论 -
第一讲:STL Application
一、STL六大部件(components)C++标准库把非常重要的算法和数据结构都包含在内。容器要放东西,东西要分配内存。容器是一个模板类,需要操作容器里存的东西。数据在容器中,但是操作数据的算法在别的地方,从而容器与算法分离,这与类中将数据与操作都放在类中所不同。迭代器就是一种泛化的指针(就把他看做指针)。仿函数有个仿字,说明就是看起来像个函数。理解:我有1斤苹果,通过分配器(分配苹果的)分配一个篮子只(容器),通过放苹果算法将苹果根据篮子的地址(迭代器)t通过我的手(函数适配器)放每一个苹果。原创 2020-06-26 22:38:51 · 116 阅读 · 0 评论