
STL库源码
~
Czy_whlg
不忘本心!
展开
-
RBtree节点结构
[1]https://www.bilibili.com/video/BV1zt411V7Ye?p=20原创 2020-09-09 18:58:50 · 266 阅读 · 0 评论 -
deque内存管理
[1]https://www.bilibili.com/video/BV1zt411V7Ye?p=18原创 2020-09-09 18:56:55 · 213 阅读 · 0 评论 -
vector容器的动态分配空间
vector容器的底层实现基于数组,里面封装了大量高效的方法,可以完美取代掉数组。整个容器的核心实际上就是动态分配内存,也是其性能优于数组的重要原因。下面重点解析它的核心函数push_back函数:当数组中增加一个元素x的时候,先判断是否还有备用空间;如果还有备用空间,则将当前指针的值设为x,并将当前的指针加1;若备用空间已经用完,如果之前的空间为0,则重新分配大小为1的空间,否则将空间扩容为...原创 2020-03-01 21:33:58 · 2752 阅读 · 0 评论 -
字符串处理函数
字符串的处理在日常的编程当中相当重要,主要是对所给的字符串进行合理的切割。1.输入函数getline1.1 cin.getline函数原型:istream& getline( char * str, streamsize n, char delim ) //str----输入的字符串 n-----所截取的字符串长度 delim-------结束标识符具体实例...原创 2020-02-25 23:19:07 · 280 阅读 · 0 评论 -
accumulate累加和函数
STL库提供了很方便的计算数组所有元素的和的函数,具体的实现也比较简单,如下://stl_numeric.htemplate <class InputIterator, class T>T accumulate(InputIterator first, InputIterator last, T init) { for ( ; first != last; ++first...原创 2020-02-24 22:28:31 · 354 阅读 · 0 评论 -
count和count_if函数
今天在优化代码的时候碰巧看到count_if函数,研究了一下,该函数主要用于统计序列化容器(内部没有实现特定排序算法的容器,例如vector,list,queue,stack等)满足条件的值,还是比较有用的。具体的实现源码如下://stl_algo.htemplate <class InputIterator, class Predicate>typename iterato...原创 2020-02-23 23:04:57 · 752 阅读 · 0 评论 -
Vector容器重载运算符源码解析
vector容器是特别有用的工具,可以完美取代数组,底层是基于数组实现的。这里主要介绍它的重载运算符==,该运算符可以实现快速判断两个数组是否是一样的。具体实现,如下代码:判断两个数组是一样的,要满足两个条件:①两个Vector容器的大小要一样 ②固定位置上的值要一样具体运用:https://leetcode.com/problems/permutation-in-string///...原创 2020-02-22 15:33:25 · 2782 阅读 · 0 评论 -
next_permutation和pre_permutation源码解析
排列和组合在数学上特别的常见,同时,在编程比赛当中也会经常碰到。STL封装了特别高效的排列组合函数:next_permutation和pre_permutation,理解它们实现的思想,才能更好地运用。1.next_permutation实现思想:首先,从最尾端开始往前寻找两个相邻元素,令第一元素为*i,第二元素为*ii,且满足*i < *ii,找到这样一组相邻元素后,再从最尾端开始...原创 2020-02-20 23:31:34 · 393 阅读 · 0 评论 -
二分查找函数(lower_bound、upper_bound和 binary_search)
这3个函数是STL库提供的高效查找工具,之前刷leetcode的时候经常用到,但总是搞混lower_bound和upper_bound,这里做个总结。下面这3个函数的使用均要求容器序列有序,具体使用例子结果如下:1.lower_bound函数顾名思义,这个函数是在一段有序序列当中,查找某个值在序列中的下界。返回第一个大于或等于查找值的迭代器;若不存在,则返回last迭代器。函数原...原创 2020-02-14 17:59:52 · 364 阅读 · 0 评论