把函数指针封装为闭包
众所周知C函数是无状态的(如果不算全局变量),如果要实现类似闭包的功能通常会将第一个参数设置为上下文,让回调函数在被调用的时候传入,但实际上通过构造机器码是可以实时生成一个闭包函数的,代码放在github gist.
<
众所周知C函数是无状态的(如果不算全局变量),如果要实现类似闭包的功能通常会将第一个参数设置为上下文,让回调函数在被调用的时候传入,但实际上通过构造机器码是可以实时生成一个闭包函数的,代码放在github gist.
<
假如我们需要设计一个需要密码才能登录的页面,某些偷懒的大聪明可以很容易地写出这样的代码:
1 | function login(password) { |
关于无锁数据结构有很多介绍了,如果想获得开箱即用的方案可以直接找liblfds,不过考虑到liblfds常年没维护,所以很多时候还得自己写,这里记录一下如何用原子操作实现无锁队列。
真的是很简单了,就是一个链表,我们使用结构体定义该链表的节点和链表本身
1 | struct queue_node { |
众所周知wxWidgets是一个跨平台的GUI库,支持Linux(GTK/X11),Windows和macOS(cocoa),与Qt不同的是,他足够轻量,不需要魔改C++语言本身(qmake说的就是你),而且它调用平台原生API实现GUI,而Qt在Windows上实际上是绘制的界面,所以我打算用wxWidgets来做毕设。
众所周知Windows是现阶段的主流操作系统,而我用来写代码的电脑是mac,所以最终我可能仍然需要提供一个Windows版本的程序,但是我实在是不想在虚拟机上再折腾一套开发环境,所以就想着能不能直接在macOS或者Linux上编译出exe呢?答案是可以的,那就是mingw。
也就是优先队列,我们知道STL中提供了一个好用的优先队列priority_queue<T>
,C语言中起码有不少库(比如librock
)提供了这玩意,所以写这玩意纯属造无意义的轮子。但是我写这玩意主要是因为最近在面试,至少遇到了两次让手写一个堆(不过当时都没写出来,毕竟不会真的有人要手写STL提供的算法和数据结构吧?不会吧?不会吧?),闲着也是闲着,不如锻炼一下,堆还是很好写的。
我写的这个版本用void*
模拟泛型,同时能自动扩容,但是缺点也很多,就我自己的感觉是时间复杂度的常数肯定很大,虽然是$O(\log_2 n)$,但是有大量的判断,而且插入位置也没有优化,只写了个简单的测试例,总之不推荐在生产环境用(STL不香吗?)。
是的,现在api.js成为模块啦!但是我改了下名字,现在他叫restful-proxy,因为我实际上是对RESTful风格的API进行封装,而且用了Proxy,本来是想叫做restful.js
的,无奈这个名字已经有人用了(虽然万年没更新,而且也没有我的抽象)。
因为大多数题目的字符串都是小写字母,所以就按照这个设计了,共26个英文字母,每个节点占用26个char。
1 | class TrieNode { |