Echo Blog

Words and ideas can change the world.

数据结构之链表

剑指 offer 学习笔记

作为一名程序猿,想在面试的时候游刃有余,首先要熟练掌握数组、字符串、链表、树、栈、队列这几种基础的数据结构。 1 字符串 C/C++ 中字符串一般以 '\0' 作为结尾,因此可以很方便地寻找字符串的最后。 但是注意字符串的实际长度要考虑 '\0' 的存在。 字符串的拷贝一般从后向前,可以避免覆盖以及额外的工作量。 2 链表 链表是一种动态的数据结构,因为在创建链表时,不需...

数据结构之数组

剑指 offer 学习笔记

作为一名程序猿,想在面试的时候游刃有余,首先要熟练掌握数组、字符串、链表、树、栈、队列这几种基础的数据结构。 1 数组 数组空间效率不高,需要预先分配内存,且经常会有空闲区域得不到利用。 数组时间效率较高,根据下标可以在 O(1) 时间内完成读写。 可以利用数组时间效率高的特点来实现简单的哈希表。 为了解决数组空间效率不高的问题,有人设计了动态数组,当数据数目超过容量时,扩...

抛出一个异常

More Effective C++ 学习笔记

C++ 是一个难学易用的语言!难学一方面在于其广博,因此我选择用笔记的形式精简出一些有用的条款。 函数与异常的参数 虽然函数的参数声明与 catch 子句中声明参数看起来几乎没什么区别,但其实存在这巨大的差异。 调用函数时,程序的控制权会回到函数调用处;但抛出异常时,控制权永远不会回到抛出异常的地方 对象作为参数传递给函数时不一定需要拷贝;但异常对象在传递时总是进行拷...

防止资源泄露(内存泄露)

More Effective C++ 学习笔记

C++ 是一个难学易用的语言!难学一方面在于其广博,因此我选择用笔记的形式精简出一些有用的条款。 防止资源泄露 在发生异常时,好的构造和析构函数能够防止资源泄露。 析构函数 用 try...catch 块,若遇到异常,先释放资源再传递异常,可行但难以维护且不美观 局部对象替代指针避免内存泄露,比如灵巧指针类 auto_ptr ~auto_ptr() {delet...

运算符重载

More Effective C++ 学习笔记

C++ 是一个难学易用的语言!难学一方面在于其广博,因此我选择用笔记的形式精简出一些有用的条款。 运算符重载 自增、自减 以自增为例: 前缀自增无参数,后缀自增带一个默认为 0 的 int 型参数 前缀自增返回类型为引用,可以保证连续操作,如 ++++i,而后缀自增返回类型加 const,避免 i++++ 这样的非法操作 前缀自增效率较高 &&...

数组与运算符重载

More Effective C++ 学习笔记

C++ 是一个难学易用的语言!难学一方面在于其广博,因此我选择用笔记的形式精简出一些有用的条款。 数组与多态 多态和指针算法不能混合在一起,因此不要对数组使用多态 尽量不要从具体类(concrete classes)派生具体类 数组的静态分配与动态分配: 静态分配:在栈中分配内存,作用于局部,不能用作函数返回值 动态分配:需要关键字 new 在堆中分配内...

引用与指针以及类型转换

More Effective C++ 学习笔记

C++ 是一个难学易用的语言!难学一方面在于其广博,因此我选择用笔记的形式精简出一些有用的条款。 引用和指针 指针/引用的区别 引用是对象的地址;指针是对象,其对象的内容是地址。 从其惯用写法也可以发现其差别: int& ri = 1; // ri 可以代表对象本身 int *pi = 1; // pi 需要运算符 * 来获取对象 引用相当于别名,其...

深入浅出极大似然估计

学习EM算法前的补习

由于EM算法和极大似然估计(Maximum likelihood estimation,简称 MLE)有着千丝万缕的联系,所以我们先帮大家复习一下极大似然估计。 1 似然函数 通俗地讲,极大似然估计就是利用已知的样本结果(数据)信息,反推最具有可能(最大概率)导致这些样本结果(数据)出现的模型参数值。 考虑下图,红色叉号表示数据点,这组数据上方有三个高斯分布。现在假设这组数据全...

Win10下Kinect v2连接Processing

用Processing连接Kinect进行交互展示

最近在使用 Kinect 完成一个艺术装置。首先需要用 Kinect 捕捉头部的运动数据,继而用 Processing 处理数据,然后将处理好的数据发送给控制端进行装置的控制。 0 写在前面 做交互装置的同学有时会用到 Kinect,目前的版本应该是 v2,由于是微软出品,所以建议在 Windows 系统上进行部署,以免出现水土不服的状况。来自一个折腾了两天 Mac 都没搞定的程...

反向代理修复建议

反向代理有时候会由于网络状态的变化而产生崩溃,这时就需要手动修复了,流程如下。 0 杀死原有进程 首先检查autossh所占用进程, ~$ ps -aux | grep 'autossh' 输出结果中若含有反向代理搭建语句的进程如/usr/lib/autossh/autossh -M **** -CNR *** ...,则杀掉此进程kill -9 pid,此处pid为输出...