![](https://img-blog.csdnimg.cn/20190804083036314.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
侯捷老师C++
本专栏记录本人C++学习过程,对侯捷老师的课程进行归纳总结并与大家分享。
海洋之心。
视频编码学习
展开
-
C++学习35:关联容器学习总结
本篇博客主要学习关联容器在具体代码的用法。至于其底层内容和原理请点击如下链接:C++学习23:容器深度探索之RB-tree(红黑树)源码剖析C++学习24:容器深度探索之Hashtable(哈希表)源码剖析C++学习25:容器深度探索之关联容器源码剖析(unordered、multi、set、map)最常规的关联容器:set和map是基于红黑树的,其所有的key都不同,带有着自然的弱排序。...原创 2019-10-12 21:22:32 · 260 阅读 · 0 评论 -
C++学习33:Type traits
之前讲过traits,表示萃取机的意思。同迭代器一样,用typedef的形式回答算法对类型的提问。1 旧版本源码has_trivial_default_constructor:默认构造函数是不是不重要;has_trivial_copy_constructor:拷贝构造函数是不是不重要;has_trivial_assignment_operator:拷贝赋值函数是不是不重要;has_tri...原创 2019-08-04 08:37:12 · 253 阅读 · 0 评论 -
C++学习32:侯捷C++11,14新特性(标准库部分)
1 Rvalue references原创 2019-07-18 16:44:47 · 1518 阅读 · 0 评论 -
C++学习31:侯捷C++11,14新特性(语法部分)
1 Variadic Templates第一颗震撼弹!要有模板基础。前面讲过:分成一个和一包,往往和递归共用。...的意思:接受任意变化个数的形参答PPT上问题:可以并存,没有二义性。一个和一包的形式是更特化的上图是一个HashTable,有关HashTable的内容前面有所提及,后面也会再讲。这里应从蓝色框框的位置入手,随着箭头感受Variadic Templates的强力。...原创 2019-07-17 15:30:17 · 1442 阅读 · 0 评论 -
C++学习30:适配器总结
适配器可以理解为“改造器”、“变压器”,把现有的,功能也不错的东西,进行进一步的改造,如改改接口,改改函数名称等,使其换一种风貌。他可能出现在三个地方,前面我们讲过了,有容器适配器、仿函数适配器和迭代器适配器。1 性质当适配器A对一个东西B进行改造之后,适配器A就变成了那种东西,相对更简单好用的A就要面对客户,供大家使用,而B充当幕后英雄。故做法:1、A继承了B;2、A内含了B(复合关系)。...原创 2019-06-16 21:23:04 · 178 阅读 · 0 评论 -
C++学习29:迭代器深度探索之迭代器适配器
迭代器适配器原创 2019-06-16 21:22:52 · 264 阅读 · 0 评论 -
C++学习26:迭代器深度探索之iterator_category、IO流适配器
迭代器我们在前面已经学习过:1.迭代器的4个操作符重载,即移动和取值的方式;2.迭代器的5个typedef,即iterator_traits;下面我们将进行iterator_category的学习1 简介1.1 种类一共有5种iterator_category分别为:1、input_iterator:istream独有的迭代器。2、output_iterator:ostream独有...原创 2019-06-07 20:20:01 · 2063 阅读 · 0 评论 -
C++学习28:仿函数深度探索、仿函数适配器
仿函数是STL六大部件部件中最简单的。所谓仿函数就是一个类里面重载小括号,用这个类创造的对象就是仿函数对象。仿函数只为算法服务,给算法以独特的准则。1 仿函数简介1.1 特征仿函数必须重载圆括号。1.2 分类:1、算术类:进行加减运算的;2、逻辑运算类:对比特位进行操作的;3、相对关系类:比大小。1.3 示例单纯仿函数的示例如下:融入了算法的仿函数示例如下(以sort为例)...原创 2019-06-16 21:22:32 · 263 阅读 · 0 评论 -
C++学习27:STL算法形式及示例
容器部分已经告终,下面进行STL算法的学习原创 2019-06-07 20:20:12 · 452 阅读 · 0 评论 -
C++学习19:迭代器深度探索之iterator_traits
在上一节C++学习18:容器深度探索之list中我们初步了解了迭代器,知道了迭代器的操作符重载,也就是“移动”和“取值”的源码实现。下面我们进一步学习迭代器,了解迭代器的众多typedef包含的traits。1 traits所谓traits,可以理解为“萃取机”。作用就是:你丢给他什么东西,他会给你拿出你想要的特性。迭代器的特性:iterator_traits<>2 迭代器的...原创 2019-05-25 16:18:40 · 455 阅读 · 0 评论 -
C++学习24:容器深度探索之Hashtable(哈希表)源码剖析
1 哈希表简介当容器容量大于数据数量时,则可以做到一个数据占据一个位置。而对于大量数据来说,这种情况时过于理想、不存在的。故应该考虑一种容器容量小于数据数量时的处理,通过“折射"的方式放入容器,那就是哈希表。可以想象,这种操作一定会发生“碰撞”。当发生碰撞时,应该有处理他们的办法。2 哈希表的构建当发生碰撞时,当前的方法是Saparate Chaining,即在buskets vecto...原创 2019-06-05 16:06:40 · 384 阅读 · 0 评论 -
C++学习25:容器深度探索之关联容器源码剖析(unordered、multi、set、map)
set和map不同之处在于。set/map和multiset/multimap的不同之处是key能否重复。1 rbtree复习2 set2.1 性质对比红黑树,set有如下特性:2.2 源码根据源码的private部分,可见其数据就是一个红黑树类型的对象,迭代器特事故关于set的所有操作,其实都是调用了红黑树的操作。其中模板参数指定了一些默认类型,故使用时只需指定key的类型即可...原创 2019-06-05 16:07:26 · 560 阅读 · 0 评论 -
C++学习23:容器深度探索之RB-tree(红黑树)源码剖析
关联容器:非常有用,元素的查找和插入都是非常快的,可以看作一个小型数据库。1 红黑树红黑树是一种平衡二分搜索树。所谓平衡,是指没有一条过长的树枝,保持适度的平衡,这样有利于查找和插入;红黑树提供遍历的功能,存在迭代器,可以++。如果遍历,会得到一个排序的状态(中序遍历)。由于上述排序规则,所以不应该用红黑树的迭代器改变元素的值。也因为红黑树将用于后续set和map的底部支持,而且key是...原创 2019-06-05 16:06:27 · 383 阅读 · 0 评论 -
C++学习22:容器深度探索之deque源码剖析及容器适配器
1 deque的内部结构deque宏观上看是一种双向的vector,但源码并非如此。代码实现方式是分段串接,故是分段连续的。如图,buffer是缓冲区,存储着数据。对于deque,本质是一个存着指针的vector。图中例子存着5个指针,指向5段缓冲区,就是这5段数据。(vector中存的指针在中间位置)。无论向前还是向后push数据,当一个缓冲区用完后,会新分配一个缓冲区并用新的指针指向...原创 2019-06-05 12:21:14 · 461 阅读 · 0 评论 -
C++学习21:容器深度探索之array源码剖析
1 arrayarray就是数组,且能遵循容器的规则,即存在迭代器,可以使用算法对array进行操作。array与其他容器不同之处在于,必须在尖括号中指定大小,且不能扩充。array的数据是一个数组M_instance。关于进化版的array:2 forward_list这里我们可以对照双向链表list容器的代码结构:有关知识请见:C++学习18:容器深度探索之list...原创 2019-06-05 12:21:00 · 369 阅读 · 0 评论 -
C++学习20:容器深度探索之vector源码剖析
简单地说,vector就是一种可以动态增长的数组。1 vector源码图中,start和finish为begin和end迭代器所指向的位置,size为已填充元素的大小,capacity为目前vector的总容量,end_of_storage为能填到的最后一个元素位置。当超过end_of_storage时,在内存中找到一个达到两倍大原空间的内存空间进行填充操作。源码如下:可见,数据中只有s...原创 2019-05-25 16:18:52 · 1001 阅读 · 0 评论 -
C++学习18:容器深度探索之list源码剖析、迭代器的移动和取值
1 list部分源代码list是双向链表,类中只有一个数据是node,是一个指向list_node(节点)的指针。(图中的红色指针)list_node类型存有三个变量,一个是指向前驱节点的指针pred,一个是指向后继节点的指针next,最后一个是值data。前两个指针是void*类型,即point to void(图中是三层的矩形叠加的东西)list中还有一个迭代器__list_ite...原创 2019-05-15 20:49:05 · 624 阅读 · 0 评论 -
C++学习17:容器、分配器初步理解
1 容器1.1 容器及其分类容器分为顺序容器和关联容器。一、顺序容器:按顺序存入数据。1、Array:大小是固定的,无法扩充;2、Vector:空间不够时,后面可以(通过分配器)自动扩充,扩充方式是两倍扩充;3、Deque:空间不够时,前后都可以扩充,但计数时不太方便;4、List:链表,用双向指针串起来的容器,底层是环形的;5、Forward-List:单向链表,不如List方...原创 2019-05-15 17:21:01 · 575 阅读 · 0 评论 -
C++学习16:STL体系结构和基础介绍
STL,即标准模板库。是通过泛型编程(GP)得到的广为程序员所使用的库。1 STL的六大部件及关系六大部件为:容器、分配器、算法、迭代器、适配器、仿函数。其关系如下图。1、容器:是存储数据的一种东西。使用容器时,我们不需要管内存,只需要把数据放进容器中就可以了。2、分配器:完成给容器分配内存的工作,是来处理容器的。3、算法:有在容器本身里面做的一些操作,还有更多的操作是独立出来的,作为...原创 2019-05-08 21:11:06 · 956 阅读 · 0 评论 -
C++学习15:侯捷C++标准库和C++11入门
1 粗看STL程序=数据结构+算法数据结构:容器Containers算法:Algorithms容器和算法在C++标准库中给了定义,要看懂,要会用,要常用。2 C++11有助于使用的三个主题2.1 variadic templates,数量不定的模板参数语法:typename…,这三个点已经成为了语言的一部分。void print(){}template<typena...原创 2019-05-08 21:10:42 · 745 阅读 · 0 评论 -
C++学习14:代码底层——对象模型、动态绑定
1 类与类三种关系下的构造与析构构造由内而外,析构由外而内。这部分内容算是复习一下:OOP——类和类之间的关系(复合、委托、继承)原创 2019-05-05 22:30:41 · 616 阅读 · 0 评论 -
C++学习13:模板的类型和特化
前言:C++学习8:模板初步理解1 模板的类型1.1 Class template,类模板设计类时,类中定义的类型暂时不指定。在之前的学习中有谈过,见模板入门template<typename T>class complex{public: complex(T r = 0, T i = 0) : re(r), im(i) {} comple...原创 2019-05-01 16:28:08 · 2027 阅读 · 0 评论 -
C++学习12:类的行为
所谓行为像指针的类和行为像函数的类,是指一个class创建出来,有可能让它像一个指针,也有可能让他像一个函数。先放结论:有重载 operator*和operator-> 的类为行为像指针的类(pointer-like classes)有重载 operator() 的类为行为像函数的类(function-like classes)1 pointer-like classes指针所允许...原创 2019-04-30 21:38:27 · 1040 阅读 · 0 评论 -
C++学习11:转换函数及explicit
目的:一种类型的对象能不能转换成另一种类型。1 conversion function这是转换函数。可以“转出去”,即为把自己定义的类的类型,转换成内置类型(如int)。也可以“转回来”。Fraction类型是分数,和double类型很相近,因此可以把Fraction类型看做double类型。操作:用**operator double()**这个函数即可加以转换,表示Fraction可以转...原创 2019-04-29 20:33:25 · 1047 阅读 · 0 评论 -
C++学习10:侯捷C++面向对象程序设计总结
这里总结一下C++学习4-9,加深印象以备后续学习。1 三大部分1.1 不带指针的类C++学习4:详解不带指针的类(侯捷Complex类为例)C++学习8:模板初步理解1、基本知识:各种声明、类的定义、内联函数、访问级别、构造函数、重载、参数传递方式、返回方式、各种位置出现的const、友元、模板。2、操作符重载:成员函数、非成员函数、全局函数。3、设计类时一定要注意的细节:(1)...原创 2019-04-27 17:34:34 · 800 阅读 · 0 评论 -
C++学习9:OOP——类和类之间的关系(复合、委托、继承)
1 Composition 复合定义:表示“has a ”。一个class里面,有另一种class的东西。即我这种类包含有另外一种类的对象。好处:所有的功能不用自己写,直接调用他拥有类的功能就好。如下例queue中使用deque的对象,即为复合关系,就可直接调用deque的成员函数。下例可见deque是很强大的例:简单来看:用图来表示:queue类里拥有deque的东西,则在que...原创 2019-04-20 10:45:41 · 2293 阅读 · 0 评论 -
C++学习8:模板初步理解
1 类模板类模板是在类的定义时,不能确定成员的类型时,为了防止代码的冗余,用T代替。T是一个类型,告诉编译器,类型还没有绑定,不知道现在是什么类型。使用的时候,类名后要用尖括号把类型名括起来。Complex<int> a(1,2);Complex<double> a(1.0,2.0);当编译时,编译器看到了使用者的T是一种类型时(如int),则将类中全部的T替换...原创 2019-04-14 17:59:55 · 283 阅读 · 0 评论 -
C++学习7:static和this,以及单例模式
在学习之前,我们要首先回顾一下复数类:C++学习4:详解不带指针的类(侯捷Complex类为例)。1 静态类型static1.1 非静态情况(non_static)1、non_static的成员函数是通过this来调用non_static的对象:complex c1,c2,c3;cout << c1.real();cout << c2.real();和下面的...原创 2019-04-02 20:24:37 · 938 阅读 · 0 评论 -
C++学习6:堆栈及内存分配(侯捷Complex和String类为例)
代码部分:Complex c1(4,5);//所有花括号之外的,存在栈中{ Complex c2(1,2); //存在栈中 static Complex c3(1,2); //存在栈中 Complex *p = new Complex(3) //存在堆中 delete p;}1 对象类型及生命期1、c2也可以称为自动对象(auto object),因为离开作用域会被...原创 2019-03-30 21:30:23 · 1245 阅读 · 3 评论 -
C++学习5:详解带指针的类(侯捷String类为例)
同不带指针的类一样,防卫式声明、前置声明都要有。然后进行类的定义、函数(成员函数和全局函数)的声明和定义。这部分内容的大体框架和不带指针的类相同,可以参考:C++学习4:详解不带指针的类(侯捷Complex类为例)。下面就不同之处加以剖析。1 代码部分1.1 main函数为了清楚看出与不带指针的类主要的不同之处,下面请直接看main函数:int main(){ String s1()...原创 2019-03-30 21:28:58 · 1657 阅读 · 3 评论 -
C++学习4:详解不带指针的类(侯捷Complex类为例)
一、头文件头文件最好包括四部分:防卫式声明、前置声明、类的声明、部分类的定义1 防卫式声明:在大型工程中应当加以使用,如下例:#ifndef __Complex__#define __Complex__//其余部分......#endif // ! __Complex__2 前置声明定义类的时候需要引入一些库或类,应放于类的声明之前,如下例:#ifndef __Com...原创 2019-03-24 11:41:58 · 1455 阅读 · 2 评论 -
C++学习34:内存管理初探
1 C++应用程序从上到下就是我们对于内存的“底层”程度。而对于程序员而言,malloc就可以视为最底层,所有有关内存管理的内容,归根结底都是运用了malloc。对于我们而言,需要掌握的内存工具如下:下面有个应用了以上四个内容的例子:上图的1-2行、4-5行、7-8行,实际上都是执行了相同的操作:分配一块内存,然后释放掉这块内存。(7-8行的::operator new底层就是调用的...原创 2019-09-02 20:35:51 · 220 阅读 · 0 评论