CPP20 Ranges与斐波那契数列的惰性生成
C++ 20 中引入了 Ranges 模块, 该模块提供了一系列的range view, 用于对容器进行操作, 本文将使用Ranges来实现惰性生成斐波那契数列. 在开始之前 让我们写一个十分简单的递归函数,用于生成斐波那契数列: 1234567891011121314auto fibo_rec(int n) { if (n <= 1) { return 1; } else { return fibo_rec(n - 1) + fibo_rec(n - 2); }}int main() { for (int i = 0; i < 10; ++i) { std::cout << fibo_rec(i) << " "; } std::cout <<...
CS好课可以改变废柴命运吗?
SICP,大名鼎鼎的 CS 神课,狭义上指的是 MIT 6.001 课程以及同源的巫师书,要是宽泛点也能够指 UC Berkeley 的 CS61A 课程。 所谓 CS 神课,属于那种 早学到这课我还会混成这 dio 样? 的灵丹妙药,相当一部分人接触到的时候都会有这样的惊叹,我也不例外,有那么一瞬间甚至觉得,所谓 Computer Science 似乎也不过如此的错觉 可惜,当我抽出时间来的时候,已经过了入门阶段了,怎奈这门课好评如潮,不免心动,于是来了一遍速通,做了做 hw、lab 和 project,质量相当的高 做完之后,意犹未尽,于是向真正的 SICP 进发,开始看《计算机程序的构造和解释》(Structure and Interpretation of Computer Programs,SICP) 作者是麻省理工学院教授哈尔·阿伯尔森和杰拉德·杰伊·萨斯曼 我得承认,虽然我在读的时候止不住的吐槽翻译很差劲,但当我转而去 MIT 官网上 down 下原版 PDF 的时候,还是不禁叹道: 这 tm 和 CS61A...
那些坠落的感觉与午后的惆怅
fallen 如果,只是要表达此刻的感受,或许只需要 悲伤 就够了,但是如果想说清为什么悲伤,恐怕需要比打破现在的情形所需还要更多的智慧与勇气。 是身在其中就永远无法看清楚吗?也是,如果能说清现在的情形,就不会再有半点迷惘了吧。 人真是喜欢偷懒的生物,想着,只要写出什么东西,一切就搞明白了,那样所有的问题都迎刃而解。 人真是不愿承认自己错误的生物,即使是现在,还是更倾向于说 “人类是怎样的” ,这样的话就像置身事外一样,才能放下矜持的批评,或许只有把自己当成另外的事物,才能毫不留情的攻击吧。 这些不会改变什么,当然我也没有指望着神奇的效果会发生,只是觉得这样或许可以聊以抚慰静不下来的心 这种话是从什么时候就开始说的?我的心静不下来 人的距离 我想去和人打篮球 🏀 ,可是我不喜欢打篮球 我想和人一块去买水果 🍎 ,可是我不会挑水果 我想找人一起组乐队 🎸...
非常特立独行的随机 cover 实现
这篇文章将会介绍一种非常特立独行的 hexo 博客的随机 cover 实现方式。 我们先来看看,网络上流传的一些 hexo 博客的随机 cover 实现方式: 修改主题的配置文件,在默认 cover 的设置里多加几张图 调用网络上的随机图片 API,然后通过主题的默认 cover 来实现 和第二种类似,但是通过自己写个 .php 来实现一个随机图片 API 接口,这种一般需要自己的服务器 这些方法都不太适合我 为什么不适合我 首先,我不想在主题的配置文件里写一堆图片链接,这样太麻烦了,这样看来,随机图片 API 是个不错的选择,但是问题是。 额,我没有服务器啊。 或许你会说,那为什么不用网络上的随机图片 API 呢? 人的 XP 是各不相同的,不一定符合我的审美 更深层次的需求原因 如果是用随机图片 API 的话,那么实际上达到的效果会是,每次刷新播客的首页,都会使得 cover 图片发生变化,虽然这样也是种很不错的效果,但是我对随机封面的需求来源其实和效果倒是没有太大关系: 主要原因是我懒得给每个文章都配一张封面图。 更重要的是,毕竟在国内,所以图床一般用 CDN...
make hello! 全局 Makefile 模式匹配
这个博客将会介绍如何编写全局的 makefile 模式匹配,用来替换默认的隐式规则。 最终你可以直接使用 make hello 来编译 hello.c 文件、hello.tex 文件等等,而不用再写更长的编译命令。 同时,你还可以自定义这里的编译器,编译选项等等,甚至增加新的模式匹配。 内置隐式规则 (Built-in Implicit rules ) 实际上,你很可能已经使用过内置的隐式规则了,假如当前目录下有一个 hello.c 文件,那么你可以直接使用 make hello 来编译它,这就是一个隐式规则。 隐式规则可以自动推导出目标文件的依赖关系,比如 hello.o 依赖于 hello.c,并且可以自动推导出命令,比如 gcc -c hello.c -o hello.o。如果是 .cpp 文件,那么命令就是 g++ -c hello.cpp -o hello.o。 某些标准的方式经常用于重新制作目标文件。例如,一种常见的制作目标文件的方式是使用 C 编译器从 C 源文件制作目标文件。 隐式规则告诉 make...
那时年少春衫薄
如今却忆江南乐,当时年少春衫薄。骑马倚斜桥,满楼红袖招。翠屏金屈曲,醉入花丛宿。此度见花枝,白头誓不归——韦庄《菩萨蛮·如今却忆江南乐》 刚才在知乎上看到一个孩子,提问了许多问题,大抵就是11岁学编程先学C 还是 Rust什么的,看样子,是觉得人工智能很火,现在要早早入局,以后卷起一片风云的人物。我也不得不想起,我刚上初中的时候也是这样,对编程很感兴趣,我那个时候是怎样的来着?让我想想。 在我的青春将至的少年时节,我有好多奢望。 虽然囿于小小的天井,不过幸运,或者说无关紧要的是,在我年少的时候我有着一台台式机,连通着互联网。 我因而看到了很多,这些繁杂而又瑰丽的信息让我不由得神往,这些信息勾起了少年的欲望。 那个时候,还是诸如德国下水道,日本夏令营的故事大有受众的时候,我当然也不例外,漫威的电影一部不落,人生目标就是下一个乔帮主或者比尔盖茨,幼小的我想着,以后我也要写出让全世界的人都使用的操作系统,冠以自己的名号,当然,还有上不了台面的——想当世界首富 当然,后来我知道了...
Win 平台下的 GCC 与 Clang
本文主要介绍如何在 Windows 平台下使用 GCC 与 Clang 编译器,以及 包括 Cygwin、MinGW、MinGW-w64、MSYS2 的历史 前置知识 如果你了解了下面这些知识,那么你可以跳过这一节。 点击 这里 跳过这一节。 什么是 GCC GCC (GNU Compiler Collection) 是 GNU 开发的编程语言编译器。它是 GNU 项目的关键部分,也是 GNU 工具链的主要组成部分之一。GCC 目前支持的语言包括 C、C++、Objective-C、Fortran、Java、Ada、Go、D 以及各种处理器的汇编语言。 GCC 是自由软件,它的源代码在 GNU 通用公共许可证 (GPL) 下发布。GCC 由自由软件基金会 (FSF) 开发,是 GNU 项目的一部分。 什么是 Clang Clang (C Language Family Frontend for LLVM) 是一个 C、C++、Objective-C 和 Objective-C++ 的编译器前端,它采用 LLVM 作为后端。Clang 是一个自由软件,它以 BSD...
设计模式与 Warcraft 其三
须知: 这并不是一篇教程,而是一篇笔记, 如果你想学习设计模式,建议直接阅读比较好的设计模式教程,比如 设计模式|菜鸟教程。 这篇文章我们来讲讲行为型模式… 吗? 并不是,这篇文章先来讲一讲 part 1 中提到的大作业 Warcraft 3。 Warcraft 3 如果你对这个不管兴趣请点击 这里 跳过这一节。 什么是 Warcraft 3 魔兽争霸 3(Warcraft III: Reign of Chaos)是由暴雪娱乐公司开发的一款即时战略游戏,于2002年7月3日发行。游戏的故事发生在魔兽争霸系列的虚构世界中,讲述了一场由人类、兽人、亡灵和暗夜精灵四个种族之间的战争。游戏的扩展包《冰封王座》于2003年7月1日发行。 我顺便下载下来玩了会儿,很好玩,推荐。 大作业的要求 然而,这个大作业除了名字,和魔兽争霸 3 没有任何关系。 除此之外,这个大作业甚至并不是原创,实际上,经查证,原题来自 北京大学...
设计模式与 Warcraft 其二
须知: 这并不是一篇教程,而是一篇笔记 如果你想学习设计模式,建议直接阅读比较好的设计模式教程,比如 设计模式|菜鸟教程。 好的,上一篇文章我们讲了创建型模式:单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式。这一篇我们来讲讲结构型模式。 结构型模式(Structural Patterns) 结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。 一句经典的话:组合优于继承 (Composition over Inheritance) 结构型模式包括:适配器模式、桥接模式、过滤器模式、组合模式、装饰器模式、外观模式、享元模式、代理模式。 适配器模式 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。它结合了两个独立接口的功能。 我们直接举例子,这个例子来自于菜鸟教程 - 适配器模式。 为了节省空间,让我们只放这张图: 为了防止图片失效,简述一下这个例子: 我们现在有 一个实现了 MediaPlayer 接口的实体类...
设计模式与 Warcraft 其一
须知: 这并不是一篇教程,而是一篇笔记 如果你想学习设计模式,建议直接阅读比较好的设计模式教程,比如 设计模式|菜鸟教程。 在做高级程序设计大作业的时候,ChatGPT 告诉了我工厂模式,我觉得很有意思,于是就去查了一下,了解到了设计模式 什么是设计模式 设计模式 (Design pattern) 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人在 1994 年所著的《Design Patterns: Elements of Reusable Object-Oriented Software》一书中提出。他们四人合称为 GoF(四人帮,全拼 Gang of Four)。 在软件工程中,设计模式是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由埃里希·伽玛(Erich Gamma)等人在 1990...