编程语言
文章平均质量分 88
吹泡泡的小猫
着迷与计算机有关的任何东西,关注软件开发团队能力提升和敏捷开发
展开
-
有保证的复制消除(Guaranteed Copy Elision)
新的 C++ 17 标准带来了很多令人兴奋的新特性,其中一个微小的,不易觉察的改进就是“有保证的复制消除(guaranteed copy elision)”。翻译 2022-06-02 10:10:42 · 1166 阅读 · 1 评论 -
使用 Visual Studio 的属性表快速引用第三方的库
从Visual Studio 2008 开始支持用属性表对 Visual Studio 项目进行配置设置和修改,包括项目的编译选项、宏定义和引用的第三方库的包含路径。使用属性表文件,使得 Visual Studio 的项目得到了极大的简化,尤其是引用第三方的库的场景,再也不需要一遍一遍地设置头文件路径、库文件路径和库的名称了。本文就介绍一下如何使用属性表,以及如何利用导入属性表操作实现一键配置第三方的库。原创 2021-10-27 16:54:50 · 2506 阅读 · 0 评论 -
C++20,说说 Module 那点事儿
几天前,C++20 草案已经获得了标准委员会的全票通过,C++2a 草案讨论的几个重要内容,比如“概念(concept)”、“范围库(Ranges Library)”、“协程(Coroutines)” 和 “模块(Module)” 都加到 C++20 的标准中了,剩下的就是看编译器厂商的支持速度了。目前看 CLANG 、GCC 和 Microsoft 是比较积极的三家,语言特性和库支持的最快的是 GCC,其次是 CLANG 和 Visual C++,估计最快到年底就能看到支持全部 C++ 20 特性的编译器原创 2020-09-19 14:32:46 · 3331 阅读 · 0 评论 -
递归和Windows系统的栈保护
对于使用默认栈空间大小的线程来说,调用算法系列文章第7篇提到的递归版本的IsEvenNumber()函数时,当n的值大于10000时就会导致栈溢出。在Windows系统上栈溢出会导致线程的意外终止,这种线程的意外终止通常都会导致整个软件无法正常工作。如果在递归计算的过程中能够提前预知到这种情况的堆栈溢出并终止后续的递归运算,对提高程序的安全性和健壮性都很有帮助,本话题就讨论了一种能够应用与Windows系统的检测方法。原创 2014-01-13 10:05:43 · 8092 阅读 · 0 评论 -
算法系列之二十三:离散傅立叶变换之音频播放与频谱显示
频谱和均衡器,几乎是媒体播放程序的必备物件,没有这两个功能的媒体播放程序会被认为不够专业,现在主流的播放器都具备这两个功能,foobar 2000的十八段均衡器就曾经让很多人着迷。我用Winamp播放音乐(AOL已经在2013年12月20日停止了Winamp的支持),最早吸引我的原因就是播放界面上那个跳动的频谱,如图(1)所示。我一直想搞清楚这个实现原理是什么,直到我知道有离散傅立叶变换这个东西存原创 2015-03-17 21:59:39 · 16596 阅读 · 5 评论 -
算法系列之二十三:离散傅立叶变换之音频播放与频谱显示
算法系列之二十三:离散傅立叶变换之音频播放与频谱显示算法系列之二十三离散傅立叶变换之音频播放与频谱显示导语什么是频谱1 频谱的原理2 频谱的选择3 频谱的计算显示动态频谱1 实现方法2 杂项说明结果展示导语 频谱和均衡器,几乎是媒体播放程序的必备物件,没有这两个功能的媒体播放程序会被认为不够专业,现在主流的播放器都具备这两个功能,foobar 2000的十八段均衡器就曾经让很原创 2015-03-29 22:12:56 · 9302 阅读 · 3 评论 -
算法系列之二十四:离散傅立叶变换之音频播放与均衡器
导语 在算法系列的第二十二篇,我们介绍了离散傅立叶变换算法的实现,将时域的音频信号转换到频域进行分析,获取拨号音频的频率特征。这一篇我们将介绍一种频域均衡器的实现方法,所谓的频域均衡器,就是在频域信号的基础上对音频数据进行调整,然后再将频域信号转换成时域信号在回放设备上播放,从而达到音色调节的目的。将频域信号转换成时域信号的算法,就是离散傅立叶逆变换算法。1 离散傅立叶逆变换有从时域转换到频域原创 2015-05-04 20:06:37 · 22522 阅读 · 11 评论 -
研究了一下CSDN 私信的排序,我也是醉了
一直感觉CSDN的通知和私信总是看起来怪怪的,主页提示有私信,打开却看不到,有时候向后翻几页有能看到。今天又遇到这种情况了,于是研究可以下,刚开始还是没找到规律,知道看到“3天前”的消息排在最后一个“3年前”的消息之后,突然就明白了,于是翻到最开始,发现“11个月前”排在第一个,紧跟着是“1年前”的,然后是“2年前”的,再然后是“3年前”,再然后是“3天前”,再然后是“4天前”,直到“26天前”,紧原创 2015-05-18 23:04:21 · 8618 阅读 · 13 评论 -
关于《算法的乐趣》傅立叶变换一章的补充
一些热心读者反馈在介绍快速傅立叶变换(FFT)部分的描述和代码不一致,比如某位读者反馈前面正文介绍的是DIT-FFT,但是给出的代码实现确是DIF-FFT,让人困惑,本文准备补充一下相关的内容。DIT-FFT和DIF-FFT,一个是按时间抽取计算(Decimation-In-Time),一个是按频率抽取计算(Decimation-In-Frequency),是两种等价的FFT算法,本章内容主要集中在原创 2015-09-09 14:06:19 · 6856 阅读 · 2 评论 -
算法系列之十九:用天文方法计算日月合朔(新月)
中国农历的朔望月是农历历法的基础,而朔望月又是严格以日月合朔发生的那一天作为月首,因此日月合朔时间的计算是制定农历历法的关键。本文将介绍ELP-2000/82月球运行理论,以及如何用ELP-2000/82月球运行理论计算日月合朔时间。 要计算日月合朔时间,首先要对日月合朔这一天文现象进行数学定义。朔望月是在地球上观察到的月相周期,平均长度约等于29.53059日,而恒星月(天文月)是原创 2012-11-25 22:56:41 · 35379 阅读 · 15 评论 -
算法系列之十七:日历生成算法-中国公历(格里历)(上)
日历在我们的生活中扮演着十分重要的角色,上班、上学、约会都离不开日历。每年新年开始,人们都要更换新的日历,你想知道未来一年的这么多天是怎么被确定下来的吗?为什么去年的国庆节是星期五而今年的国庆节是星期三?那就来研究一下日历算法吧。本文将介绍日历的编排规则,确定某日是星期几的计算方法,以及如何在计算机上打印某一年的年历。 要研究日历算法,首先要知道日历的编排规则,也就是历法。所谓历法,原创 2012-07-15 23:08:58 · 30495 阅读 · 34 评论 -
算法系列之十七:日历生成算法-中国公历(格里历)(下)
【接上篇】 上述计算星期的方法虽然步骤简单,但是每次都要计算两个日期的时间差,不是非常方便。如果能够有一个公式可以直接根据日期计算出对应的星期岂不是更好?幸运的是,这样的公式是存在的。此类公式的推导原理仍然是通过两个日期的时间差来计算星期,只是通过选择一个特殊的日期来简化公式的推导。这个所谓的特殊日期指的是某一年的12月31日这天刚好是星期日这种情况。选择这样的日子有两个好处,一个原创 2012-08-02 22:55:11 · 22390 阅读 · 19 评论 -
算法系列之十八:用天文方法计算二十四节气(下)
【接上篇】 经过上述计算转换得到坐标值是理论值,或者说是天体的几何位置,但是FK5系统是一个目视系统,也就是说体现的是人眼睛观察效果(光学位置),这就需要根据地球的物理环境、大气环境等信息做进一步的修正,使其和人类从地球上观察星体的观测结果一致。 首先需要进行章动修正。章动是指地球沿自转轴的指向绕黄道极缓慢旋转过程中,由于地球上物质分布不均匀性和月球及其它行星的摄动力原创 2012-09-04 23:20:27 · 27842 阅读 · 35 评论 -
算法系列之十八:用天文方法计算二十四节气(上)
二十四节气在中国古代历法中扮演着非常重要的角色,本文将介绍二十四节气的基本知识,以及如何使用VSOP82/87行星运行理论计算二十四节气发生的准确时间。 中国古代历法都是以月亮运行规律为主,严格按照朔望月长度定义月,但是由于朔望月长度和地球回归年长度无法协调,会导致农历季节和天气的实际冷暖无法对应,因此聪明的古人将月亮运行规律和太阳运行规律相结合制定了中国农历的历法规则。在这种特殊的原创 2012-08-26 22:59:31 · 54298 阅读 · 39 评论 -
算法系列之二十:计算中国农历(一)
世界各国的日历都是以天为最小单位,但是关于年和月的算法却各不相同,大致可以分为三类: 阳历--以天文年作为日历的主要周期,例如:中国公历(格里历)阴历--以天文月作为日历的主要周期,例如:伊斯兰历阴阳历--以天文年和天文月作为日历的主要周期,例如:中国农历 我国古人很早就开始关注天象,定昼夜交替为“日”,月轮盈亏为“月”,寒暑交替为“年”,在总结日月变化规律的基础上制定了兼有阴历月和阳历年性质的历原创 2013-07-01 00:18:50 · 82697 阅读 · 45 评论 -
算法系列之二十:计算中国农历(二)
(接上篇) 所谓的“天文算法”,就是利用经典力学定律推导行星运转轨道,对任意时刻的行星位置进行精确计算,从而获得某种天文现象发生时的时间,比如日月合朔这一天文现象就是太阳和月亮的地心黄经(视黄经)差为0的那一瞬间。能够计算任意时刻行星位置的一套理论就被称为星历表,比较著名的星历表有美国国家航空航天局下属的喷气推进实验室发布的DE系列星历表,还有瑞士天文台在DE406基础上拓展的瑞士星原创 2013-07-15 23:36:56 · 43937 阅读 · 25 评论 -
基于文件过滤驱动的透明加密那点事儿
文件透明加密这点事儿,从2001年开始出现基于API HOOK的方式开始到现在,已经十几年了,有细心人按技术实现的方式将其细分为4代,分别是基于API HOOK的第一代技术、基于文件过滤驱动(加清缓存)的第二代技术、使用Layerfsd的双缓冲第三代技术和基于微软新一代minifilter框架的Layerfsd双缓冲第四代技术。第一代和第二代的技术划分基本上没有异议,所谓的第四代很多人并不认同,认原创 2013-08-11 23:22:16 · 19081 阅读 · 4 评论 -
算法系列之二十一:实验数据与曲线拟合
曲线拟合(Curve Fitting)的数学定义是指用连续曲线近似地刻画或比拟平面上一组离散点所表示的坐标之间的函数关系,是一种用解析表达式逼近离散数据的方法。曲线拟合通俗的说法就是“拉曲线”,也就是将现有数据透过数学方法来代入一条数学方程式的表示方法。科学和工程遇到的很多问题,往往只能通过诸如采样、实验等方法获得若干离散的数据,根据这些数据,如果能够找到一个连续的函数(也就是曲线)或者更加密集的离散方程,使得实验数据与方程的曲线能够在最大程度上近似吻合,就可以根据曲线方程对数据进行数学计算,对实验结果进行原创 2013-10-16 22:17:15 · 113104 阅读 · 21 评论 -
算法系列之十六:使用穷举法解猜结果游戏
一、 引言 穷举是解决问题的一种常用思路,当对一个问题无从下手的时候,可以考虑在问题域允许的范围内将所有可能的结果穷举出来,然后根据正确结果的判断规则对这些结果逐个验证,从而找出正确的结果。采用穷举的方法求解问题的答案比较适合计算机做,对这种体力活它们没有怨言,本文就以常见的两个猜结果的题目为例,介绍一下如何通过计算机程序解决此类问题,顺便介绍一下穷举法常见的算法结构和实现方式。原创 2012-05-27 23:01:37 · 13277 阅读 · 12 评论