0%

本文以 C++ 为示例语言,但实际其中思想适用范围远大于 C++ 这一编程语言的范畴。

我们知道,C++ 标准模板类库提供了一系列的容器。诸如 std::vector<ElementType> 的容器需要在声明时指定容器中所储存的元素的类型。例如,我们可以使用 std::vector<int> 声明一个包含整型数字的变长数组;而 std::vector<std::string> 则可以用来声明一个包含 std::string 的变长数组。

显而易见,由于容器在声明时就已指定了其包含的元素的类型,容器内只能包含相同类型的元素。这与面向对象编程(Object-Oriented Programming, OOP, 使用继承和运行时动态绑定的编程方式)的思想似乎是矛盾的。因为 OOP 使用继承和动态绑定,允许程序员将相关但有不同的类的共性部分抽象成基类而将这些不同的部分分别作为子类独有的成员;若是容器内只能包含相同类型的元素,我们就无法直接在一个容器中包含同一个基类不同派生类的对象了——而在实际应用中,这种场景是存在的。

前作中最后的示例(动物园的例子)中,我们通过保存基类指针(而不是对象本身)部分解决了这个问题。然而,在前例中,我们不可避免地还是需要使用 newdelete 来动态分配内存。此篇我们通过构建「代理类」来避免手工动态分配内存。

阅读全文 »

看似高大上的人工智能、机器学习,实际上都脱不开数学的支持。在这些数学内容中,最重要的无疑是两个部分:代数和概率论。我无法在博客中完整地介绍代数(特别是矩阵论)和概率论,但是将其中部分有趣又重要的内容提出来讲解,还是可行的。

此篇,我们谈谈矩阵的 SVD 分解。

阅读全文 »

一般来说,参考文献、索引等章节的标题在论文中是不编号的。但是,在一些特殊情况下,我们可能也需要为这些标题做章节编号。

这边文章介绍如何处理此类情况。

阅读全文 »

最近在自如租房时,负责租房的管家提供了名为「自如分期」的房租付款方式。观其操作模式,与信用卡分期还款、银行现金贷基本无差。印象里,以前有看到过文章讲述信用卡分期还款是不划算的;所以,在选择付款方式时,我就多留了一个心眼。

这里,将相关的分析,记录下来。以便让后来者明白:为什么说信用卡分期还款是不划算的。

阅读全文 »

自 2014 年,始终博客就开始使用 Hexo 这个静态站点生成工具了;犹记得当时参考的文章,是 Bruce 的 Hexo 你的博客

始终博客采用的主题,是 iissan 创建的 NexT。NexT 主题默认提供了两个站内搜索解决方案:swiftype 和 tinysou。早年时候,始终博客采用了 swiftype 作为站内搜索方案;但后来因为 swiftype 改版而失效,就放弃了。

近期,随着始终博客的文章数量不断增加,陆续有友人建议应该为博客加上搜索功能。然而,出于几方面的考虑,我一直没有加上搜索功能:

  • 不愿意受限于第三方服务,第三方服务可能说变就变——曾经的各种博客网站,以及 swiftype 就是如此;
  • 不喜欢第三方服务的样式,与博客样式脱节;
  • 使用第三方服务,需要应用第三方的 JavaScript 脚本等内容,可能存在安全风险。

经过检索之后,我发现 Hexo 已有可以接受的解决方案了。本文来介绍如何在 Hexo 博客中建立自己的本地搜索引擎。

阅读全文 »