自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 数据结构--Tire树

实现一个Trie树一、Trie树的基本操作二、代码实现一、Trie树的基本操作(1) 插入字符串(2) 搜索目标字符串(3) 搜索以目标字符串为前缀的情况是否存在二、代码实现class Trie{public: class TrieNode{ public: TireNode(char data){ this->data = data; this->children.assign(26, nullptr); } public: char data;

2022-03-13 18:36:00 716

原创 数据结构--链表

实现一个链表一、链表的基本操作二、代码实现一、链表的基本操作(1) 遍历(统计链表长度)(2) 查找链表中某元素(3) 在链表中插入某节点a. 链表头插入b. 链表尾插入c.给定节点之后插入(4) 在链表中删除某结点a. 删除给定结点之后的结点b. 删除给定结点(并返回删除后的链表的头结点)二、代码实现class MyList{public: class Node{ public: Node(int data){ this->value = data;

2022-03-10 22:53:22 213

原创 浅撕实现一个类的底层内存池

实现针对类的内存池一、内存池的概念和实现原理概述“内存池”,要解决什么问题?“内存池”的实现原理二:针对一个类的内存池的实现代码三、内存池代码的改进嵌入式指针(embedded pointer)专门的内存池类一、内存池的概念和实现原理概述malloc:内存浪费,频繁分配小块内存,则浪费更加显得明显。“内存池”,要解决什么问题?(1)减少malloc的次数,减少malloc()调用次数就意味着减少对内存的浪费;(2)减少malloc的调用次数,是否能够提高程序运行效率? 会有一些速度和效率上的提升,

2022-03-09 22:36:25 205

原创 C++ 内存管理(四)----非标准库下的allocator

C++ 内存管理(四)----非标准库下的allocator一、array_allocator二、bitmap_allocator一、array_allocator由其构造函数array_allocator()知,因为必须传入指针参数,所以传入指针参数的默认值必须赋值,即默认赋空值。以下操作与上操作相同,只是定义对象时方式不同,实际意义相同:二、bitmap_allocator用完了第一个super-blocks,则创建第二个super-blocks时,blocks的数量按第一个block

2021-06-10 15:54:02 188 1

原创 C++ 内存管理(三)----Loki allocator

C++ 内存管理(三)----Loki allocator一、上中下三个classes一、上中下三个classes最表层的struct SmallObjAllocator:1.FixedAllocator类型指针 pLastAlloc和 pLastDealloc分别指向其内部存放的首个元素[FixedAllocator类对象]的首地址 和 末尾元素[FixedAllocator类对象]的地址的下一个位置;2.chunkSize为指定chunk的内存大小class FixedAllocator{

2021-06-09 22:52:24 251

原创 C++ 内存管理(三)----VC6内存分配

C++ 内存管理(三)----VC6内存分配一、源码- _heap_init() 和 _sbh_heap_init()- _ioinit()- _heap_alloc_dbg()- _heap_alloc_base()二、SBH行为分析---分配+释放图解三、分配内存归还操作系统一、源码代码执行次序是从下往上的,且可知在进入main程序执行之前,先执行的是mainCRTStartup的前置程序(分配内存空间)。- _heap_init() 和 _sbh_heap_init()_heap_init(

2021-06-08 18:56:34 817 2

原创 C++ 内存管理(二)----std::alloc

C++ 内存管理(二)----std::alloc一、std::alloc运行模式(G2.9)- 基本结构- 运行图示过程二、std::alloc 源码剖析- 第一级分配器- 第二级分配器- refill( )函数- chunk_alloc( )函数三、总结一、std::alloc运行模式(G2.9)- 基本结构前面中的per-class allocator的四个版本,实现操作都是每个class里面只有专属于它的allocator,然后其里头也只维护一条free list,专门为其服务。而std::

2021-06-03 23:20:10 1140

原创 C++ 内存管理(一)----per-class allocator

C++ 内存管理(一)----per-class allocator一、per-class allocator 1二、per-class allocator 2一、per-class allocator 1想利用类内重载operator new去接管内存的分配,然后利用内存池的观念【即创建出一大段连续空间的内存,然后将其切割成一小段一小段】,将创建的元素对象放在内存池切分好的各分段小内存片中,这样避免了多次调用new而造成生成多个带有cookie的内存空间。通过内存池的观念,可以生成一大段只带有两个头尾

2021-06-02 11:25:03 583 3

原创 C++ 内存管理(一)----new/delete

C++ 内存管理(一)----new/delete一、C++程序使用memory的途径二、new/delete expression( new/delete表达式 )三、直接调用Ctor&Dtor一、C++程序使用memory的途径一般来说user使用时都是调用标准库的std::allocator去分配内存,而std::allocator内部是调用到了new,new[],new()【此为placement new】,::operator new()…,而new…这些底层则又是调用了mall

2021-06-01 19:40:16 215

原创 C++ STL和泛型编程(四)----movable

C++ STL和泛型编程(四)----movable一、moveable对各容器的影响二、moveable class三、测试函数一、moveable对各容器的影响其对vector的影响表现在 ctor / move ctor【因为vector存在空间不足时得重新扩展,然后再拷贝到新空间的情况,所以最终得到的vector的ctor和move ctor时间上差别明显。而其他容器的ctor和move ctor则差别不大,主要差别在copy ctor 和 move ctor】 及 copy ctor / m

2021-05-30 11:55:01 391

原创 C++ STL和泛型编程(四)----type traits

C++ STL和泛型编程(四)----type traits一、源码实现(G2.9)二、C2.0下三、type traits测试- class Foo- class Goo- class Zoo四、type traits实现- is_void- is_integral一、源码实现(G2.9)trivial表示平凡的,不重要的意思。由上知,泛化版本的struct __type_traits其default_constructor,copy_constructor等等都是重要的,且都不是POD_type

2021-05-29 22:24:55 170

原创 C++ STL和泛型编程(四)----tuple

C++ STL和泛型编程(四)----tuple一、tuple用例一、tuple用例元组其主要操作如上所示,其里面可以放置不定量且不同类型的元素数据,底层源码实现如下(利用variadic templates):首先,其在这里运用的自我继承,且参数层层拆分递减【与前面的hash function通用模板的拆分递减参数调用类似,只不过这里是运用在类继承上面。而且这是C++设计模式中的一种。】,每往上继承一层对应的父类传入模板参数就被拆分少1个,一直往上继承,直到继承到base父类【此时传入模板参数为

2021-05-29 17:07:11 150

原创 C++ STL和泛型编程(四)----一个万用的hash function

C++ STL和泛型编程(三)----一个万用的hash function一、Hash Function通用版型二、实现操作三、以struct hash偏特化形式实现 Hash Function一、Hash Function通用版型#inlcude <functional>class Customer{ // 自定义一个存放于容器的元素的类public: string fname; string lname; long no; Customer(const string _fna

2021-05-29 12:20:03 271

原创 C++ STL和泛型编程(三)----适配器(Adapters)

C++ STL和泛型编程(三)----适配器(Adapters)一、作用及类别二、Container Adapters三、Functor Adapters- binder2nd- not1- bind四、Iterator Adapters- reverse_iterator- inserter(注意不是insert)五、X adapters- ostream_iterator一、作用及类别Adapter是将某个已经存在的东西改造一下,如改下接口(两个参数的改为一个参数)或改下函数名称之类的。在编程技术

2021-05-28 22:01:58 328

原创 C++ STL和泛型编程(三)----仿函数Functors

C++ STL和泛型编程(三)----仿函数和函数对象(Functors)一、结构形式二、仿函数functors的可适配(adaptable)条件一、结构形式Functors是一个struct即类,里面operator(),所以最终是创建出来一个对象,而因为这个对象起到像函数的作用因而称为仿函数。其只为算法提供服务。这里的Functors都继承了binary_function<T, T, T>类。由上图左下角的Algorithm的第三传入模板参数知,其需要一种函数或仿函数去告诉它如何操作

2021-05-26 13:43:32 138

原创 C++ STL和泛型编程(三)---部分算法源码剖析(Algorithms)

C++ STL和泛型编程(三)---部分算法源码剖析一、结构形式二、算法accumulate三、算法for_each四、算法replace, replace_if, replace_copy五、算法count, count_if六、find, find_if七、算法sort八、算法binary_search九、关于reverse iterator, rbegin(), rend()一、结构形式template<typename Iterator>std::Algorithm(Iterato

2021-05-25 22:58:07 144

原创 C++ STL和泛型编程(三)----迭代器的分类(category)

C++ STL和泛型编程(三)---迭代器的分类(category)一、迭代器的中介作用二、各种容器的iterators的iterator_category三、iterator_category对算法的影响四、算法源码中对iterator_category的“暗示”五、iterator_category和type traits对算法的影响一、迭代器的中介作用容器Container是class template算法Algorithm是function template迭代器Iterator是clas

2021-05-25 19:03:00 306

原创 C++ STL和泛型编程(二)---- hashtable[unordered_set&unordered_map]

C++ STL和泛型编程(二)---hashtable[unordered_set&unordered_map]一、结构二、代码实现(G2.9)三、使用实例(G2.9)- **hash-function, hash-code**- **modulus运算**四、unordered_set, unordered_map, unordered_multiset, unordered_multimap一、结构hashtable称哈希表,又称散列表【因为其中当元素总数超过bucket时打散之后再排序的】

2021-05-25 10:25:28 185

原创 C++ STL和泛型编程(二)---- map/multimap

C++ STL和泛型编程(二)---- map/multimap一、map- 结构特性- 底层代码实现- G2.9中- VC6中- operator[ ] (map中独特的方式,multimap不支持)一、map- 结构特性map/multimap以rb_tree为底层结构,key和data是独立分开的,其iterator可以改变data但不可改变key,所以map/multimap内部自动将user指定的key_type设定为const类型,即禁止修改元素的key值。map中实现insert(

2021-05-22 15:18:26 177

原创 C++ STL和泛型编程(二)---- set/multiset

C++ STL和泛型编程(二)---- set/multiset一、set- 结构特性- 底层代码实现- G2.9中- VC6中二、multiset一、set- 结构特性set/multiset以rb_tree为底层结构,其value和key是合二为一的即value就是key【元素里面只放一个东西】。因为不能改变key值,所以使用的iterator是rb_tree的const iterator。set中实现insert()操作时,调用的时rb_tree的insert_unique();mul

2021-05-22 11:09:11 104

原创 C++ STL和泛型编程(二)---- rb_tree

C++ STL和泛型编程(二)---- rb_tree一、rb_tree结构二、底层代码实现一、rb_tree结构其是平衡二分搜索树中经常被使用的一种:其排列规则【左子树上所有结点的值均小于或等于它的根结点的值,右子树上所有结点的值均大于或等于它的根结点的值,左、右子树也分别为二叉排序树】有利于search和insert,并保持适度平衡而无任何节点过深。其遍历顺序是先左端子树节点,再根节点再右子树节点即左中右、左中右。所以iterator begin()指向最左端的左子树节点,iterator en

2021-05-22 09:58:04 222

原创 C++ STL和泛型编程(二)---- deque

C++ STL和泛型编程(二)---- deque一、结构(G2.9)二、迭代器(G2.9)三、insert()函数(G2.9)四、deque模拟连续空间(G2.9)- operator -()- operator ++()/ operator ++(int) & operator --()/ operator --(int)- operator +=()/ operator +()- operator -=()/ operator -()- operator\[ ]()五、G4.9一、结构(G2

2021-05-21 13:04:19 225

原创 C++ STL和泛型编程(二)---- array

C++ STL和泛型编程(二)---- array 和 forward_list一、array- TR1版本:- G4.9版本:二、forward_list因为将array设计成容器后,便可以利用上一些如迭代器、仿函数、算法等部件,可操作性强。一、array- TR1版本:template<typename _Tp, std::size_t _Nm>struct array{ typedef _Tp value_type; typedef _Tp* pointer; type

2021-05-19 21:03:50 149

原创 C++ STL和泛型编程(二)---- vector

C++ STL和泛型编程(二)---- vector一、结构- G2.9下:- G4.9下:二、迭代器- G2.9下:- G4.9下:一、结构- G2.9下:容器vector里有三个变量便可操作整个容器,start\finish\end_of_storage:由图可知,vector里面存放的数据元素只有6个,但实际上容量却有8个元素,且其动态扩展是按实际容量的2倍来扩展的即先在其他地方找一个新的内存空间(而不是在原地扩充的),然后再将元素逐一搬过去。1.变量 start迭代器指向连续空间中已经

2021-05-19 18:21:09 159

原创 C++ STL和泛型编程(二)---- 迭代器的设计原则和Iterator Traits的作用与设计

C++ STL和泛型编程(二)---- 迭代器的设计原则和Iterator Traits的作用与设计一、Iterator遵循的原则- typename的使用:- Iterator必须提供5种associated types:二、Traits(特性、特征、特质)----萃取机一、Iterator遵循的原则算法在对容器进行操作时,是通过Iterators去操作的,所以算法在操作使用Iterators时需要知道其的一些性质!即 Algorithms提问,Iterators回答。如:rotate()算法对i

2021-05-17 22:51:44 173

原创 C++ STL和泛型编程(二)---- 容器 list

C++ STL和泛型编程(二)---- 容器 list一、G2.9下的list- 结构- 代码实现- class list\一、G2.9下的list- 结构由图知,其是环状双向的,且为了符合STL“前闭后开”的特征,末端的下一个元素是不属于容器内部的而是在容器外的。而且其是通过迭代器即泛化指针对其中的元素进行操作的。- 代码实现在看源代码时,很多class都会通过typedef定义自己的类型!template<class T>struct __list_node{ typedef

2021-05-16 23:12:45 150

原创 C++ STL和泛型编程(二)----分配器(allocators)

C++ STL和泛型编程(二)一、OOP vs. GP二、分配器allocators- (1)在VC下:- (2)在BC下:- (3)在G2.9下:- (4)在G4.9下:一、OOP vs. GPOOP: Object-Oriented programmingOOP一般将数据和操作数据的函数放在同一个类里进行,然后再通过各种继承关系进行运作。这里list没有RandomAccessIterator,所以不能用全局的::sort()进行排序,因为全局的sort()要求传入的指针参数,可以随意加减变

2021-05-16 19:19:02 201

原创 C++ STL和泛型编程(一)

C++ STL和泛型编程(一)一、STL六大部件二、容器的“前闭后开”区间三、容器结构与分类- Sequence Containers(序列式容器):- Associative Containers(关联式容器):- Unordered Containers(未定序容器):其内部位置会动态发生变化的四、容器分类与各种测试- 容器 array- 容器 vector- 容器 list- 容器 forward_list- 非标准库容器 slist(只是gun c下的非标准库的,与forward_list功能相似)

2021-05-16 11:38:56 307 1

原创 C++面向对象补充(三)

C++面向对象补充(三)一、auto二、ranged-base for三、reference四、Object Model(对象模型)- 关于vptr和vtbl- 关于this- 关于Dynamic Binding五、关于const六、关于new和delete- 重载 ::operator new, ::operator delete, ::operator new[], ::operator delete[] (全局的)- 重载 member operator new/delete or member op

2021-05-12 10:18:03 224

原创 C++面向对象补充(二)

C++面向对象补充(二) 一、conversion function二、pointer-like classes三、member template一、conversion function开头的情况class Fraction{public: Fraction(int num, int den = 1): m_numerator(num), m_denominator(den){} operator double() const{ // 转化函数是不需要设置返回类型的 return(d

2021-05-09 18:43:37 278

原创 01背包问题

01背包问题题目基本思路初始值问题结果枚举问题优化空间复杂度(使用一维数组)题目有NNN件物品和一个容量为VVV的背包。第i件物品的体积是c[i]c[i]c[i],价值是w[i]w[i]w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大,求出最大价值总和(要区别背包刚好装满和背包可以不装满的两种不同情况下的求解)。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获

2021-05-08 17:44:45 82

原创 C++面向对象(四)Inheritance, Composition, Delegation

C++面向对象(四)Composition, Delegation, Inheritance一、Composition(复合)- 关系表示为:has-a- 其构造和析构的关系二、Delegation(委托)- 其关系表示为:composition by reference三、Inheritance(继承)- 其表示关系为:is-a- 其构造和析构的关系- virtual functions(虚函数)四、多态(一)Inheritance + Composition(二)Delegation + Inherit

2021-04-30 22:31:54 494

原创 C++面向对象补充(一) static, cout, template

C++面向对象(三)补充 static, cout, template一、static二、cout三、template一、static静态函数只能处理静态数据调用static函数的方式有两种:(1)、通过object调用(2)、通过class name调用class Account{public: static double m_rate; static void ser_rate(const double& x){ m_rate = x; }};double Acc

2021-04-28 19:17:58 231

原创 C++面向对象(三)String类

C++面向对象(三)String类一、深浅拷贝二、Big Three(三个特殊函数)- ctor 和 dtor(构造函数和析构函数)- copy ctor(拷贝构造函数)- copy op=(拷贝赋值函数)三、stack(栈)和heap(堆)-Stack-Heap四、动态分配的内存空间- 动态分配所得的**内存块**- 动态分配所得的**数组(array)**一、深浅拷贝String.h ———————————————————————————————————————————————————————

2021-04-28 16:41:56 221

原创 C++面向对象(二) Complex对象

C++面向对象(二)Complex对象一、Header(头文件)防卫式声明二、Header(头文件)的布局class declaration & definition(1)内联函数——inline functions(2)构造函数——constructor(ctor)① 初始化② 重载(overloading)③ 常量成员函数(==const== member functions)④ 参数传递(pass by ==value== or ==reference(to const)==)⑤ 返回值传递(

2021-03-21 11:33:33 1686 1

原创 C++ 面向对象(一) C++与C

C++ 面向对象(一) C++与CC++的历史C++的演化C++的历史B语言(1969)C语言(1972)C++语言(1983)(new C →\rightarrow→ with Class →\rightarrow→ C++)C++的演化C++ 98(1.0)C++ 11

2021-03-19 16:59:54 183

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除