
对C++STL的源码剖析
对STL的学习和剖析
林林林ZEYU
坚持
展开
-
327-Hash_table的学习(1)
关于hashtable部分讲解测试测试1我们调式进入hashtable接下来我们要初始化桶接下来first指向第一个结点,last指向最后一个元素的后继pos指向第一个大于n的值** __first函数的书写**template <class _ForwardIter, class _Tp, class _Distance>_ForwardIter __lower_bound(_ForwardIter __first, _ForwardIter __原创 2021-05-30 20:21:13 · 319 阅读 · 3 评论 -
326-Hash_map的学习(1)
了解hash_map(无序哈希)数组里有很多元素,其中一个元素出现了2次,找出这个元素旧方法:穷举策略在这里要用的方法:我们有hash_map关于链式哈希左边是哈希表,右边是链表。为什么给素数?因为取模发生冲突的可能性比较小!// Note: assumes long is at least 32 bits.static const int __stl_num_primes =28;//28个素数 static const unsigned long __stl_原创 2021-05-29 20:29:12 · 140 阅读 · 0 评论 -
322-学习STL的set
学习STL的set找到数组中重复的元素我们用set解决如下:我们用map解决如下:原创 2021-05-23 20:52:48 · 147 阅读 · 0 评论 -
320-用map解决员工打卡问题
用map解决员工打卡问题题目如下解题思路如下map,一个是姓名,一个是时间。姓名按照字典序直接排好序了。一个人对应多个打卡时间。用函数substr把字符串的小时和分钟分解出来。用函数把stoi把字符串转成int的数字。解题代码如下#include<iostream>#include<thread>#include<map>#include<list>#include<vector>#include<alg原创 2021-05-23 19:57:40 · 206 阅读 · 0 评论 -
319-学习使用STL的map
学习使用STL的map了解mapmap主要是做映射假设有一个一个的记录(学生记录),由学号和学生的姓名性别宿舍号…主键是学号查的的时候通过查询学号。我们通过数据库查询。我们做上一个结构体:由**学号和指针(映射关系)**构成。关系到一条一条的记录上。但是这个学号是可以从小到大排序的。(二分查询)(查询速度是非常快的)如果说,我们的数据库要不断的插入和删除数据,插入和删除的频率非常大,因为是插入到有序的数组,这时候就不适合二分查询,我们可以使用map(底层是红黑树)不关是要保存学号,还要保原创 2021-05-23 19:03:46 · 187 阅读 · 0 评论 -
318-学习STL的map和函数对象(1)
学习STL的map学习map的<pair.h>定义两个键值对的比较,=,<制造键值对并返回学习STL的仿函数,函数对象最大的特点是在类里面重载了()泛型算法和函数对象看下面的例子我们增加代码我们再增加代码在C++中,我们用仿函数替代函数指针学习函数对象的库文件定义一元仿函数和二元仿函数加法仿函数减法仿函数乘法仿函数除法仿函数取余仿函数取负数(单目)仿函数 负的变正的,正的变负的=仿函数原创 2021-05-22 20:54:24 · 169 阅读 · 0 评论 -
317-STL的迭代器(2)
STL的迭代器(2)1、继续学习STL的<iterator.h>注意:我们可以向上兼容!调动如下图所示关于SGI的介绍看下面这个例子我们要知道,空间是空间,对象是对象!!!我们是申请空间。不是创建空间。申请空间,创建对象,析构对象,销毁空间。我们这里的析构函数是无关紧要的析构函数,没有什么特别的意义,当程序调动无关紧要的析构函数,对我们的效率是一种伤害,如果我们知道这个类型的析构函数是无关紧要的,就不要一遍一遍地去调动。STL对代码进行大优化!2、Class和S原创 2021-05-22 19:38:25 · 159 阅读 · 0 评论 -
312-STL的迭代器(1)
STL的迭代器hash_table是正向迭代器std::slist是正向迭代器(单链表)list是双向迭代器dequee是双向迭代器map和set也是双向迭代器只有随机迭代器才可以比较大小例子如下迭代器的图示理解假设有一个链表,结点有value,prev,next我们可以通过迭代器知道它的值(数据类型),引用类型(引用的是对象的别名),指针类型(返回的是迭代器指向的结点的数据的地址,即对象实体的地址),差值类型(两个迭代器之间的距离,有几个元素),随机迭代器。原创 2021-05-17 20:17:10 · 525 阅读 · 0 评论 -
311-STL的alloc.h的实现
STL的alloc.h的实现#ifndef YHP_ALLOC_H#define YHP_ALLOC_H#include<iostream>#include<thread> #include<mutex>#include<shared_mutex>namespace yhp{#ifdef __STL_PTHREADS #include<pthread.h>class _Lock{private: pthread_mut原创 2021-05-17 19:31:50 · 263 阅读 · 0 评论 -
310-基于STL的内存对list的实现
基于STL的内存对list的实现#pragma once#include"yhp_alloc.h"//开空间 #include"yhp_construct.h"//构造对象 namespace yhp{template<class _Ty,class _A = yhp::alloc>class list{private: struct _Node; typedef struct _Node* _Nodeptr; struct _Node { _Nodeptr原创 2021-05-17 18:24:24 · 204 阅读 · 0 评论 -
309-STL的空间配置器(2)
<alloc.h>的实现代码#ifndef YHP_ALLOC_H#define YHP_ALLOC_H#include<iostream>namespace yhp{#if 0#include<new>#define __THROW_BAD_ALLOC throw std::bad_alloc;#elif !defined(__THREAD_BAD_ALLOC)//#include<iostream>#define __THROW_BA原创 2021-05-15 19:47:44 · 182 阅读 · 0 评论 -
305-STL的空间配置器(1)
头文件<stl_alloc.h>专门用于管理内存,内存的申请和释放(我们可以想象成operator new)头文件<stl_construct.h>,专门管理某个内存空间中的构建或者析构对象。头文件<stl_uninitialized.h>是对大块内存的填充和拷贝在多线程情况下,需要加锁和解锁。当这个内存块的大小大于128字节,我们认为这个块足够大,把它交给第一级配置器(直接使用malloc和free)去配置。当这个内存块的大小小于128字节,我们认...原创 2021-05-09 21:37:32 · 307 阅读 · 3 评论