![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 72
PLUS_WAVE
这个作者很懒,什么都没留下…
展开
-
侯捷 C++ STL标准库和泛型编程【C++学习笔记】 超详细 万字笔记总结 笔记合集
STL —— Standard Template Library,标准模板库C++ Standard LIbrary,C++标准库中包含STL(即STL+一些小东西)STL六大部件:容器(Containers)、分配器(Allocators)、算法(Algorithms)、迭代器(Iterators)、仿函数(Functors)、适配器(Adapters)实例:判断条件 predicate 为: —— 表示 >= 40 数为真在模板参数的关键字使用中与 是一样的在类型前面加上 :在这个例子中, 用于告诉原创 2023-10-06 10:11:41 · 1284 阅读 · 1 评论 -
侯捷 C++ STL标准库和泛型编程 —— 9 STL周围
最后一篇,完结辽!😋。原创 2023-10-05 08:39:57 · 212 阅读 · 0 评论 -
侯捷 C++ STL标准库和泛型编程 —— 8 适配器
的键盘输入读进去了,之后就是一个一个取出来赋值给 value 的操作。原理依旧是大量的**操作符重载 **—— 就可以改变原函数的作用。注意:对逆向迭代器取值,就是取其所指正向迭代器的前一个位置。其思想就是将该记的东西记起来,以便日后使用。都是属于 deque 的 Adapter。占据第一参数,第二参数绑定2,即。用C++11的新语法定义一个实例。指的是被绑函数中的第一个参数。其实现原理核心就是 —— 对。变为一个输出工具,分隔符是。后是否有充裕空间,对。,就会有如下用 copy。原创 2023-10-04 08:39:49 · 230 阅读 · 0 评论 -
侯捷 C++ STL标准库和泛型编程 —— 6 算法 + 7 仿函数
STL规定每个 Adaptable Function(之后可以改造的函数)都应该继承其中一个(因为之后。防函数是我们自己可能会写的,所以自己写的时候,如果想要融入STL,就要继承上面的两个之一。==该值的元素(不包括目标值本身),并返回一个指向该位置的迭代器。==该值的元素(包括目标值本身),并返回一个指向该位置的迭代器。仿函数专门为算法服务,设计成一个函数/仿函数是为了能传入算法。这里可以用任意的二元操作(可以是函数,也可以是仿函数)一样是前闭后开的原则,且他们都用的是二分查找的方法。原创 2023-10-03 08:38:51 · 256 阅读 · 0 评论 -
侯捷 C++ STL标准库和泛型编程 —— 4 分配器 + 5 迭代器
其从0到15有一共16个链表,分别代表8字节到16*8字节,例如 #0 的位置用 malloc 要一大块内存,然后做切割,切成一块一块的8字节空间。:用于定义类型特征的信息,从而在编译时根据类型的不同进行不同的操作或处理 —— 类似一个萃取机(针对不同类型做不同操作:偏特化)在源码中,算法都是模板函数,接受所有的 iterator,但一些算法只能用特定的 iterator,所以其会在。,用单向链表穿起来;是指的有不重要的拷贝赋值函数(例如复数用的自带的拷贝赋值函数)迭代器的分类对算法的效率有很大的影响。原创 2023-10-01 08:43:32 · 233 阅读 · 0 评论 -
侯捷 C++ STL标准库和泛型编程 —— 3 容器(关联式容器)
不能用 iterator 去改变元素的key(其有严谨的排列规则),但可以用 iterator 去改变元素的 data。在扩充时,按 vector 扩充为2倍大小,但会选择靠进这个数的一个质数做新的大小。,key 为指定的 key,data 为默认 data,并返回这个默认 data。不能用 iterator 去改变元素的 key(其有严谨的排列规则)禁止用 iterator 去改变元素的值(其有严谨的排列规则)以 rb-tree 为底层结构,因此有——元素自动排序,将返回与该键关联的 data;原创 2023-09-30 11:26:10 · 155 阅读 · 0 评论 -
侯捷 C++ STL标准库和泛型编程 —— 3 容器(序列式容器)
两个位置之间的距离 = buffer_size * 两个位置之间 buffer 的数量 + 末尾位置到 buffer 前端的长度 + 起始位置到 buffer 末尾的长度。除了 array,vector 这样是连续存储的容器,其他容器的 iterator 都是智能指针,其有大量的。随机数据填充容器:3063ms;用时编译器可以通过的,但在具体使用函数时,若遇到底层容器没有这个函数时,就会报错。是容器自带的排序函数,如果容器自带肯定是要比全局的排序函数好的。的大小一致,每次扩充都是扩充一个指针指向一个新的。原创 2023-09-27 08:42:05 · 128 阅读 · 0 评论 -
侯捷 C++ STL标准库和泛型编程 —— 1 STL概述 + 2 OOPvsGP
STL —— Standard Template Library,标准模板库C++ Standard LIbrary,C++标准库中包含STL(即STL+一些小东西)STL六大部件:容器(Containers)、分配器(Allocators)、算法(Algorithms)、迭代器(Iterators)、仿函数(Functors)、适配器(Adapters)容器:放数据分配器:是来支持容器将数据放到内存里算法:是一个个函数来处理存放在容器里的数据迭代器:就是来支持算法操作容器的仿函数。原创 2023-09-25 08:11:14 · 155 阅读 · 0 评论 -
侯捷 八部曲 C++面向对象高级开发(上)+(下)【C++学习笔记】 超详细 万字笔记总结 笔记合集
本笔记根据侯捷老师的课程整理:C++面向对象高级编程(上)+(下)全网最详细的侯捷笔记整理,思路整理,17000字整理原创 2023-08-17 10:37:49 · 1441 阅读 · 0 评论 -
侯捷 C++ part2 兼谈对象模型笔记——7 reference、const、new/delete
在常量成员函数中,数据不能被改变所以不需要COW;引用底部的实现也是指针,但是注意 object 和它的 reference 的。的签名signature 在C++中是视为相同的——二者不能同时存在。reference 通常不用于声明变量,用于参数类型和返回类型的描述。):表示这个成员函数保证不改变 class 的 data。是函数签名的一部分,所以加上后是可以共存的。,可以写出多个版本,前提是每一个版本的声明有。大小是相同的,地址也是相同的。的 object 占用的内存。,所以上面两个函数是共存的。原创 2023-08-16 17:32:00 · 227 阅读 · 1 评论 -
侯捷 C++ part2 兼谈对象模型笔记——6 多态 虚机制
例如:用一个 Shape(父类)的指针,调用 Circle(子类)的。,子类在继承中对于虚函数会通过指针的方式进行——因为可能其会被改写。多态优点:代码组织结构清晰,可读性强,利于前期和后期的扩展以及维护。:同样是 Shape 的指针,在链表中却指向了不同的类型。当类中有虚函数时(无论多少个),其就会多一个指针——,但虚函数可能会被改写,所以调用虚函数是==在汇编代码中,调用函数的时候,蓝框的操作用。,再找到调用的第n个虚函数函数——是通过对象来调用,是。,是用其调用虚函数——在汇编代码中,是通过。原创 2023-08-14 08:36:19 · 295 阅读 · 0 评论 -
侯捷 C++ part2 兼谈对象模型笔记——5 三个C++11新特性
注:下面这样是不行的,第一行编译器找不到返回值类型。编译器通过赋值的返回值类型,自动匹配返回类型。,编译器会从容器中依次拿出数据。来得到参数pack里的数量。注意:改变原容器中的值需要。模板参数可变化,其语法为。原创 2023-08-12 07:09:16 · 214 阅读 · 0 评论 -
侯捷 C++ part2 兼谈对象模型笔记——4 specialization 特化
特化是泛化的反面,可以针对不同的类型,来设计不同的东西。注意绑定模板参数不能跳着绑定,需要从左到右。例如:想要当模板参数是指针时特别设计。例如:第一个模板参数我想针对。原创 2023-08-11 08:10:58 · 217 阅读 · 0 评论 -
侯捷 C++ part2 兼谈对象模型笔记——3 模板
例一,可以使用 对象来构造一个 的pair。后面还有参数,需要用中间框和下面框下一行的代码 —— c++11的内容。它即是模板的一部分,自己又是模板,则称为成员模板。智能指针也必须可以,所以其构造函数需要为==补充:只有模板的尖括号中,关键字。例二,父类指针是可以指向子类的,叫做。是有一个初始值,当没指定时就初始为。即模板中的一个模板参数也为模板。在要指定时,如最后一行中的。类型的—— 创建一个。原创 2023-08-10 07:05:37 · 161 阅读 · 0 评论 -
侯捷 C++ part2 兼谈对象模型笔记——2-xxx-like-classes
是迭代器包着的一个真正的指针,其指向。设计一个class,行为像一个函数。为例,这种智能指针还需要处理。Foo 中的函数 method。有一个小括号,所以函数中要有。Foo 类型的 object。原创 2023-08-09 07:15:59 · 175 阅读 · 0 评论 -
侯捷 C++ part2 兼谈对象模型笔记——1 转换
表示这个 ctor 只能在构造的时候使用,编译器不能拿来进行类型转换了。当上面两个都有转换功能的函数在一起,编译器调用时都可以用,报错。one-argument 表示只要一个实参就够了。将当前对象的类型转换成其他类型。将其他类型的对象转换为当前类型。原创 2023-08-08 07:51:12 · 186 阅读 · 0 评论 -
侯捷 C++面向对象编程笔记——10 继承与虚函数
Derived 的构造函数首先调用 Base 的 default 构造函数,然后调用 Component 的 default 构造函数,然后才执行自己。这里的 clone 函数就不能用之前的那个构造函数来创建副本了——其会放到父类中去,所以创建一个新的构造函数。补充:当一个子类继承自父类时,它可以被视为是父类的一种类型,因此可以使用父类的指针或引用来引用子类的对象;函数,父类通过调用找到的相应类型的 clone 函数来创建子类的副本。,把它放到父类的一个空间中,这样父类就可以找到新创建的子类。原创 2023-08-07 08:05:07 · 507 阅读 · 0 评论 -
侯捷 C++面向对象编程笔记——9 复合 委托
但当a要改变内容时, 系统会单独复制一份出来给a来改,b和c依然在共享。Container 的构造函数,编译器会自动先调用 Component 的 default 构造函数,再执行自己。即通过指针把任务委托给另一个类。注意如果要调用 Component 的其他构造函数需要自己写出来。是一个已经存在的功能很多的类(两头进出的队列);类似于c中结构里有结构——class里有class。复合中,内部和外部是一起出现的;该例只是复合的一种情况——设计模式。这是一个著名的设计模式——右边怎么变动都不会影响左边。原创 2023-08-06 07:40:30 · 478 阅读 · 0 评论 -
侯捷 C++面向对象编程笔记——8 静态 模板 namespace
对东西进行一个包装(不一定要一次性全写在一起,可分开包装在一起)指针来处理不同的数据(一份函数—>多个对象)应用时,不需要写某种类型——编译器自己会推导。用法二:using declaration。,不能处理一般的数据,只能处理静态的数据。用法一:using directive。比较函数——任何类型都可以进行比较;非静态的成员函数通过。原创 2023-08-03 08:36:39 · 114 阅读 · 0 评论 -
侯捷 C++面向对象编程笔记——7 堆,栈,内存管理
是指由操作系统提供的一块 global 内存空间,程序可动态分配 (dynamic allocated) 从中获得若干区块 (blocks)写在任何作用域之外的对象,其生命在整个程序结束之后才结束,你也可以把它视为一种 static object,其作用域是整个程序。便是所谓 stack object,其生命在作用域 (scope) 结束之际结束这种作用域内的 object,又称为。因为内存块是16的倍数,因此最后四位bit一定都是0,,是存在于某作用域 (scope) 的一块内存空间。原创 2023-08-02 07:46:15 · 134 阅读 · 0 评论 -
侯捷 C++面向对象编程笔记——6 带指针的类:三大函数
编译器默认的拷贝构造赋值(一个bit一个bit的复制),编译器默认的只是拷贝了指针(浅拷贝),而不是指针指向的数据。编译器默认的拷贝构造赋值(一个bit一个bit的复制),编译器默认的只是拷贝了指针(浅拷贝),而不是指针指向的数据。alias(别名)和 memory leak(内存泄漏)都是十分危险的。alias(别名)和 memory leak(内存泄漏)都是十分危险的。了后,会使第三步出现问题## 6 带指针的类:三大函数。例:这里结束会调用三次 dtor。例:这里结束会调用三次 dtor。原创 2023-08-01 07:59:43 · 139 阅读 · 0 评论 -
侯捷 C++面向对象编程笔记——5 操作符重载与临时对象
创建一个classname类型的临时对象——不需要名称,生命只有一行。在c++里我们可以定义加法等操作符,比如我们可以定义两个石头的加法。前面带有class的名称(在class里先声明了的)非成员函数是global函数——为了后面两种使用方法。只能全局函数,不能成员函数——导致使用时方向相反。cout不认识新定义的这种复数,因此也需要对。参数传递:os 在函数中会变化,所以不能加。将操作符写为void函数也可以,应对三种使用方法,写出三种方式。所有的成员函数都带有一个。指向调用这个函数的调用者。原创 2023-07-31 08:00:38 · 99 阅读 · 0 评论 -
侯捷 C++面向对象编程笔记——4 友元 friend
直接取另一個 object 的 private data。友元:friend,原创 2023-07-28 07:56:51 · 114 阅读 · 0 评论 -
侯捷 C++面向对象编程笔记——3 参数传递与返回值——引用
引用传递 pass by reference,传引用相当于传指针,快,形式也漂亮 例。值传递 pass by value,传递value是把整个参数全传过去,因为函数结束后函数中创建的变量就消失了,无法引用。接受——所以用reference形式很便捷。如果只是为了提升速度,reference形式。原创 2023-07-21 09:17:02 · 122 阅读 · 0 评论 -
侯捷 C++面向对象编程笔记——2 构造函数
函数要被外界使用,定义为public;若只是内部处理,定义为private。原创 2023-07-20 09:11:31 · 146 阅读 · 0 评论 -
侯捷 C++面向对象编程笔记——1 头文件与类的声明
c语言中,data和函数都是分别定义,根据类型创建的。这样创建出的变量,是全局的。(class),创建出一个对象,即为面向对象;数据和函数(类的方法)都是。将数据data和函数都包含在一起。引用自己写的头文件,用双引号。原创 2023-07-19 12:50:55 · 193 阅读 · 0 评论