自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

InGeniX

Louis Henry's Blog

  • 博客(26)
  • 收藏
  • 关注

原创 C++ 中的型别推导

C++ 中的型别推导1. 模板型别推导对于以下函数模板和调用// 函数模板template<typename T>void func(ParamType param);// 调用模板函数func(expr);编译器会在编译期通过 expr 推导两个型别:T 和 ParamType。比如// 函数模板template<typename T>void ...

2018-11-02 16:56:09 902 1

原创 常见概率分布及其意义

离散型概率分布二项分布设在一个试验中事件 A 发生的概率是 ppp,则独立重复 nnn 次试验后,事件 A 发生 iii 次的概率为pi=B(n,p)=(ni)pi(1−p)n−i,i=0,1,...,np_i = B(n, p) = \left(\begin{matrix} n \\ i \end{matrix}\right)p^i(1-p)^{n-i}, \quad i = 0, 1...

2018-10-31 19:56:33 8388

原创 线程简介

线程 Thread线程基础线程是程序执行流的最小单元一个线程由线程 ID、当前指令指针 PC、寄存器集合和堆栈组成一个进程(Process)通常由一个或多个线程组成,各线程之间共享该进程的内存空间(代码段、数据段、堆等)和进程级的资源(打开文件、信号等)为什么使用线程:某个操作可能会陷入长时间等待,等待的线程会进入睡眠状态,无法继续执行;多线程执行可以有效利用等待时间多线程可以让...

2018-10-31 19:55:22 243

原创 极大似然估计和贝叶斯估计

极大似然估计设总体服从分布 f(x;θ1,...,θk)f(x; \theta_1, ..., \theta_k)f(x;θ1​,...,θk​),X1,...,X2X_1, ..., X_2X1​,...,X2​ 为从这个总体中抽出的样本,则样本 (X1,...,X2)(X_1, ..., X_2)(X1​,...,X2​) 的分布为L(x1,...,x2;θ1,...,θk)=∏i=1...

2018-10-31 11:55:44 1156

原创 统计上的三大分布

正态分布和两个重要的函数设随机变量 X1,X2\bm{X}_1, \bm{X}_2X1​,X2​ 独立,且分别服从正态分布 N(μ1,σ12)\bm{N}(\mu_1, \sigma_1^2)N(μ1​,σ12​) 和 N(μ2,σ22)\bm{N}(\mu_2, \sigma_2^2)N(μ2​,σ22​),则随机变量 Y=X1+X2\bm{Y} = \bm{X}_1 + \bm{X}_2...

2018-10-30 21:10:00 7237

原创 C++ Idioms 05

本文介绍了 C++ 的 5 个特别用法(Idioms),分别是Shrink to Fit;Thin Template;Type Selection;Virtual Constructor;Virtual Friend Function;21. Shrink to Fit用途令容器的容量最小化至其元素个数示例代码vector<int> v;vecto...

2018-10-28 14:50:57 277

原创 C++ Idioms 02

本文介绍了 C++ 的 5 个特别用法(Idioms),分别是Concrete Data Type;Lazy Evaluation;Copy and Swap;Copy on Write;Reference Counting;06. Concrete Data Type用途通过允许或禁止动态内存分配来控制对象的生存期和作用域示例代码只允许通过动态内存分配的方式创...

2018-10-28 13:37:04 290

原创 C++ Idioms 01

本文介绍了 C++ 的 5 个特别用法(Idioms),分别是addressof();Attorney-Client;Calling Virtuals During Initialization;Capability Query;Clear-and-minimize;01. addressof()用途类可以重载 & 使其违反“取对象地址”的本意,此时可以通过 a...

2018-10-28 13:36:20 352

原创 C++ Idioms 04

本文介绍了 C++ 的 5 个特别用法(Idioms),分别是Named Constructor;Non-copyable Mixin;Exception Safe Swap;Resource Acquisition Is Initialization (RAII);Resource Return;16. Named Constructor用途以更直观的方式创建对象...

2018-10-28 13:35:11 284

原创 C++ Idioms 03

本文介绍了 C++ 的 5 个特别用法(Idioms),分别是Curiously Recurring Template Pattern;Empty Base Optimization;Erase-Remove;Inner Class;Int to Type;11. Curiously Recurring Template Pattern用途使用派生类作为模板参数特化基...

2018-10-27 22:49:27 355

原创 深度探索 C++ 对象模型 04:成员函数

C++ 支持三种 member function:static、nonstatic 和 virtualMember Function 的调用方式nonstatic member functionC++ 保证 nonstatic member function 至少和普通 non-member function 有相同的效率,member function 会被内部转化为 non-mem...

2018-10-25 21:54:52 221

原创 C++ 设计模式 02:面向对象 SOLID 设计原则

Single Responsibility Principle 单一职责原则每个类只负责一项职责,因此也只有一个变化点在一个结构体系里,如果经常需要在多个类中同步地做相同的改动,那通常意味着设计不良杜绝“万能类”class Journal{public: explicit Journal(const string& _title) : title(_title) {}...

2018-10-22 14:54:43 493

原创 C++ 设计模式 01:设计模式一览

本文根据 GoF 英文原版 Design Patterns: Elements of Reusable Object-Oriented Software 和中文版《设计模式:可复用面向对象软件的基础》 以及李建忠老师的课程 C++ 设计模式 整理01. Abstract Factory 抽象工厂模式提供一个接口以在不必指定具体类的条件下构建一系列相关或相互依赖的对象02. Adapt...

2018-10-22 14:49:17 185

原创 深度探索 C++ 对象模型 03:数据成员

即使一个类表面上是空的,它也内含一个隐式的 char,从而确保这个类的任意两个 object 不会在内存中占用相同的地址类的 nonstatic data member 放置其各个 object 感兴趣的数据,而类的 static data member 则放置类本身感兴趣的数据nonstatic data member 直接存放在每一个 class object 中,对于继承而来的 no...

2018-10-19 19:44:34 198

原创 深度探索 C++ 对象模型 02:构造函数

Default Constructorclass MyClass{public: int val; MyClass* pnext;};void foobar(){ MyClass obj; if(obj.val || obj.pnext) // do something}以上代码片段的程序语义要求 MyClass 的 default construct...

2018-10-19 16:11:00 231

原创 深度探索 C++ 对象模型 01:对象模型简介(附静态成员介绍)

C - 过程式(procedural)语言:数据和处理数据的操作(函数)分开声明,语言本身并不支持数据和操作之间的关联性过程式语言由一组分布在函数中的算法所驱动,这些函数以功能为导向,这些算法则处理共同的外部数据typedef struct point3d{ float x; float y; float z;} Point3d;void print_point3...

2018-10-18 20:56:50 231

原创 深入理解计算机系统:优化程序性能

编写高效程序选择合适的算法和数据结构编写编译器能够有效优化从而转换成高效可执行代码的程序对于运算量非常大的计算,将任务分解为多个子任务,使其在多处理器和多核上并行执行优化编译器的能力和局限性妨碍优化的因素必须考虑两个指针可能指向同一个地址(存储器别名的使用)当 px 和 py 指向不同的地址时,*px 和 *py 的值能正确交换当 px 和 py 指向相同的地址时,它...

2018-10-17 19:23:53 430

原创 深入理解计算机系统:几个重要概念

执行程序系统编译系统从源代码文本文件到可执行目标文件的转化由编译系统(compilation system)完成预处理器(cpp):hello.c —> hello.i根据以字符 # 开头的指令修改原始程序编译器(cc1):hello.i —> hello.s将预处理之后的文本文件翻译为汇编语言程序(依然是文本文件)汇编器(as):hello.s —&gt...

2018-10-17 19:21:25 540

原创 C++ 笔记:类的继承

OOP 概述OOP 的核心思想是数据抽象、继承和动态绑定数据抽象:将类的接口与实现分离;类的用户通过接口使用类,而类的实现则不向用户开发继承:通过类的继承对类之间的相似和层次关系建模动态绑定:在恰当的时候忽略相似类型之间的差别,并以统一方式处理继承基类与派生类基类:负责定义在层次关系中所有类共有的成员派生类:负责定义各自特有的成员,从而也体现出了类之间的区别c...

2018-10-16 19:23:48 292

原创 C++标准库源码分析之 iterator

本文代码根据 GNU ISO C++ Library 所含库文件整理,同时参考了 Microsoft Visual Studio Community 2017 版本 15.8.4 的库文件源代码和《STL 源码分析》(侯捷著)中的第 3 章内容本文暂时略去了源文件中的异常处理代码iterator 概述每一种 STL 容器都有专属的迭代器,避免暴露容器的内部结构iterator 的种...

2018-10-12 17:05:22 1464

原创 C++标准库源码分析之 array

array本文代码根据 GNU ISO C++ Library 所含库文件整理,同时参考了 Microsoft Visual Studio Community 2017 版本 15.8.4 的库文件源代码本文暂时略去了源文件中的异常处理代码本文暂时略去了源文件中 array 对 tuple 的支持array 概述用于存储固定数量元素序列的标准容器以内置数组为基础实现依赖项:&l...

2018-10-11 14:04:08 2476

原创 C++ 笔记:动态内存和智能指针

对象的生存期:全局对象:程序启动时创建,程序结束时销毁局部自动对象:进入对象所在程序块时创建,离开程序块时销毁static 对象:第一次使用时创建,程序结束时销毁动态分配的对象:创建之后只有在显式地被释放时才会销毁每个程序拥有一个内存池,称为自由空间或堆,用来存储动态分配的对象智能指针传统的动态内存管理:new:在动态内存中为对象分配空间,返回一个指向该对象的指...

2018-10-02 18:48:37 303

原创 C++ 笔记:关联容器

关联容器概述顺序容器中的元素按其在容器中的顺序保存和访问,而关联容器中的元素则按关键字保存和访问关联容器类型mapkey - value 映射的集合,关键字不允许重复,且有序排列#include <map>使用例子:string word;map<string, size_t> word_count; // 一个从字符串到计数的空 map ...

2018-10-02 16:55:00 571

原创 C++ 笔记:顺序容器

顺序容器概述顺序容器类型:vector // 可变大小数组;快速随机访问;尾部插入删除deque // 双端队列;快速随机访问;头尾插入删除list // 双向链表;双向顺序访问;任意位置插入删除forward_list // 单向链表;单向顺序访问;任意位置插入删除array // 数组;快速随...

2018-10-02 11:50:11 200

原创 C++ 笔记:函数

函数基础形参和实参编译器能以任意可行的顺序对实参求值实参数量应与形参数量一致,所以形参一定会被初始化局部对象形参和函数体内部定义的变量统称为局部变量,局部变量仅在函数的作用域内可见,并将外层作用域中的同名变量隐藏在所有函数体之外定义的对象存在于程序的整个执行过程中。此类对象在程序启动时被创建, 直到程序结束才会销毁局部静态对象在程序的执行路径第一次经过对象定义语句时初始化,并且...

2018-10-01 19:57:38 229

原创 C++ 笔记:引用、指针和 const 限定符

引用、指针和 const 限定符引用指针`const` 限定符对 `const` 的引用指向 `const` 的指针指向非常量的 `const` 指针指向 `const` 的 `const` 指针顶层 `const`引用引用必须初始化,也就是说,引用从“出生”开始就必须绑定至另一个对象,且必须“从一而终”引用必须绑定至对象,而不能绑定至字面值或表达式计算结果引用的类型要和其绑定的对象严格...

2018-10-01 15:36:16 382

空空如也

空空如也

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

TA关注的人

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