
C/C++ 开发笔记
文章平均质量分 94
C/C++相关技术文章
码工许师傅
软件工程师,开源爱好者;
擅长物联网、嵌入式、人工智能相关技术;
曾获荣誉/称号:
华为开发者专家(HDE);
51CTO最有价值专家(MVP);
电子发烧友最有价值专家(MVP);
OpenHarmony第20位开发者;
OpenHarmony“开发者贡献奖”(2020年)。
展开
-
【项目分享】基于AB32和RT-Thread的墨水屏智能日历
本项目硬件部分包含4.2寸墨水屏、墨水屏驱动板、ESP8266模组和W25Q128闪存模组以及开发板自带的按键,硬件功能上使用了AB32芯片的SPI、UART、GPIO。软件部分包含业务代码、RT-Thread内核、RT-Thread组件包以及一些移植的三方组件。本项目实现了根据IP地址定位查询所在城市天气,从NTP服务器同步时间到片上RTC,最终在4.2寸墨水屏上显示当前日期、天气、温度、阳历、农历的效果。源码全部开源,欢迎Star支持。原创 2021-12-24 10:30:11 · 921 阅读 · 0 评论 -
C++哪些运算符重载可以重载?
运算符重载是C++重要的特性之一,本文首先引用了C++标准文档对于“运算符重载”的规定,然后通过代码实例回答了:哪些运算符可以重载?如何重载?实现运算符重载时应注意哪些?原创 2014-09-29 23:01:52 · 13826 阅读 · 1 评论 -
avr-libc malloc/free的实现
本文从源码角度分析了malloc/free在avr-libc下的具体实现。avr-libc的malloc/free使用了单链表链接的freelist作为管理chunk的“账簿”,同时采用了“最佳适配”策略——即若freelist有多个chunk可满足当前malloc(size)请求,将以“最佳的”(所有大于size的chunk中最小的)chunk响应。原创 2014-10-25 09:48:30 · 4347 阅读 · 0 评论 -
C++类型转换
一篇来自cplusplus.com的文章,这是我所看过的关于C++类型转换的最全面、最细致、最深入的一篇文章,本文为其中文译文。本文介绍了C++的各种类型转换,具体包括:基本类型的隐式类型转换,C风格的类型转换,类的隐式转换(implicit conversion),explicit关键字,static_cast, reintperet_cast, const_cast, dynamic_cast。 以及和RTTI相关的typeid关键字。翻译 2014-11-01 15:51:50 · 1804 阅读 · 1 评论 -
类球多面体生成——经纬划分法
规则多面体生成算法,算法本身并不复杂。开始想百度一份的,结果没百度到。贴出来,希望以后有用得到的同学可在直接拿去用。算法过程根据经纬线数目求出多面体表面所有点的坐标;连接南北极附近的三角形面;连接中间的四边形(或两个三角形);算法实现下面是该算法的C++实现.Convex* SphereGenerator::generate(int longitudes, int l原创 2014-06-14 18:10:01 · 2657 阅读 · 0 评论 -
为什么operator>>(istream&, string&)能够安全地读入长度未知的字符串?
本文首先试验并分析了栈上定长字符数组输入字符的安全性(char buf[6]; scanf("%s", buf);),然后对operator>>(istream&, string&)的实现细节进行分析,最后仿照operator>>用C语言实现了读入长度未知的字符串(字符行)原创 2014-05-06 13:40:02 · 3237 阅读 · 0 评论 -
C++运算符重载的妙用
运算符重载(Operator overloading)是C++重要特性之一,本文通过列举标准库中的运算符重载实例,展示运算符重载在C++里的妙用。具体包括重载operator<<,operator>>支持cin,cout输入输出;重载operator[],实现下标运算;重载operator+=实现元素追加;重载operator()实现函数调用。原创 2014-09-18 00:42:30 · 3536 阅读 · 0 评论 -
C++虚函数浅探
本文首先介绍了C++中和虚函数(Virtual Function)相关的两个概念——静态绑定、动态绑定;然后,从最简单的例子演示二者的区别;最后,结合《深度探索C++对象模型》关于Virtual Function实现的探讨,跟踪并分析了文中代码示例在VC2008下的反汇编,分析结果与<模型>所述一致。原创 2014-04-15 13:45:58 · 1378 阅读 · 1 评论 -
bullet HashMap 内存紧密的哈希表
bullet 作为开源实时物理引擎,在速度和性能上有着优秀的表现。本文首先分析了bullet的内存对齐、动态数组,然后分析了std::ordered_map的内存布局,最后分析了btHashMap内存布局的独特之处,并解释了为什么这种设计有着优秀的性能表现。PS:对算法、数据结构、内存管理、高性能感兴趣的同学,此文绝对值得一看。原创 2014-11-09 14:07:20 · 2682 阅读 · 0 评论 -
btHashMap vs std::unodered_map ——两种hashmap的性能对比测试
本文用实验对比了btHashMap和std::unordered_map在几种不同场景下的性能表现,证实了前文对于二者性能差异上的断言,并从rehash成本的角度解释了当size达到一定数量时std::unordered_map性能表现下降的原因。原创 2015-07-25 11:41:33 · 3818 阅读 · 0 评论 -
Qunie——自我生成程序
Qunie是一段没有输入,但输出和它本身源码相同的程序。本文无任何高深技术,纯属娱乐! wikipedia的解释:A quine is a non-empty computer program which takes no input and produces a copy of its own source code as its only output.原创 2015-08-10 16:04:07 · 1167 阅读 · 0 评论 -
Resource Acquisition Is Initialization(RAII Idiom)
原文链接:http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Resource_Acquisition_Is_Initialization转载 2014-05-12 20:25:06 · 1221 阅读 · 0 评论 -
C++代码重构——从C global到C++ template
如何实现代码的从算法正确到优秀的面向对象(或模板)封装?这或许是在写C++代码时经常需要考虑的。本文以有界队列为例,描述了一种C++代码从C算法到C++模板的重构方法。这种方法简单可行,实现了逻辑(算法)设计与接口设计两个步骤的分离。原创 2014-04-18 21:57:49 · 7160 阅读 · 0 评论 -
Pooled Allocation(池式分配)实例——Keil 内存管理
本文记录了我阅读Keil内存管理源码的过程。相对操作系统而言,Keil内存管理显得非常简单。整个过程仅借助一个单链表实现,采用首次适应策略(每次内存申请从头查找,找到一个立即“上交”)。原创 2013-09-10 22:32:59 · 3703 阅读 · 0 评论 -
命令行环境下简单实用的工具——重定向&管道
一般操作系统的命令行环境下都提供了管道和重定向工具,而使用管道和重定向能够然你的工作效率提升数倍!我是看了刘汝佳的书才知道用txt代替键盘做数据输入、测试是多么的方便!回想起每次点完GO之后一个数字一个数字的按键盘、还不时按错的痛苦经历,决定今日将这一强大的工具与大家分享。原创 2013-10-05 18:53:32 · 2127 阅读 · 3 评论 -
STL的应用 POJ 1840 Eqs 题解
题目:DescriptionConsider equations having the following form:a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0The coefficients are given integers from the interval [-50,50]. It is consider a solution a syst原创 2012-04-15 15:20:27 · 1165 阅读 · 0 评论 -
使用C++TR1实现物流配送问题的简单模拟
物流配送问题是典型的NP完全问题,寻找求解该问题的高效准确的算法一直以来都是研究热点。我在这里不是讨论解决该问题的具体算法,而是简单介绍一下C++98的一个功能强大扩展--TR1。 TR1是Technical Report 1的简称,它原本是标准委员会内部的一个名称。它是在1998年标准委员会提出C++ Standard(就是我们说的"标准C++")之后 委员会拟定的下一个版本的C++ St原创 2012-12-06 13:18:53 · 2817 阅读 · 0 评论 -
51单片机 运算能力 测试
几天前在做51循迹小车程序的时候,为了能用得上PID算法,在程序中用了很多浮点数运算。大家都知道51单片机是8位单片机,而浮点数是32位的,当时我就在想,浮点运算用多了会不会影响到小车程序的反应速度和性能呢,当时为了完工,没有多想,只是想着——反正我在程序里也用不到多少,应该不会有太大的影响。今天一想,为何不来做个测试呢,说做就做,程序很快调通了,测试结果也出来了。首先说一下我所用的51单原创 2012-08-18 21:34:30 · 7239 阅读 · 0 评论 -
STL 应用2 POJ 1007 DNA Sorting 题解 (STL完美解答)
DNA SortingTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 63845 Accepted: 25209DescriptionOne measure of ``unsortedness'' in a sequence is the number of原创 2012-05-01 02:06:29 · 862 阅读 · 0 评论 -
51 单片机 sprintf 数字格式问题
最近做51小车,期间发现,sprintf在51单片机上发生了一点小意外。出现意外的源程序如下:#include #include typedef unsigned char uchar;typedef unsigned int uint;uchar n;uint dat;char buf[128];void delay_ms(unsigned int原创 2012-07-24 11:29:13 · 4793 阅读 · 1 评论 -
[代码分享]静态链表,接口仿照STL设计,操作未做封装
很久没有来优快云,也很久没有写东西了。去年12月在OSCHINA注册了号,发了两段code。这次转过来,以便日后查阅。连接:http://www.oschina.net/code/snippet_737017_16964这是一段静态链表的实现,其间用到了一种简单的内存管理策略——空闲链表。这段代码里的“静态”是一个预先分配好的 node array,实际情况下可能会是一个一次性申请的原创 2013-04-22 23:13:02 · 1069 阅读 · 0 评论 -
【经典面试题】实现平方根函数sqrt
本文描述了二分法、牛顿法、割线法的算法步骤,并实现了基于这几种方法的SQRT;同时,从理论角度解释了这些算法背后数学原理,并将这些方法推广到了求一般方程近似解的问题上。最后,对几种方法实现的sqrt的收敛速度进行了理论分析和实验对比。实验结果表明,牛顿法的收敛速度快于割线法,割线法快于二分法;与理论分析结果一致。原创 2014-08-30 17:53:19 · 24199 阅读 · 7 评论 -
GLUT的简洁OO封装
Member function 如何作为Callback?这里其实是两个问题。第一个问题,member function的函数签名上有this指针,不能直接传给glut*Func作为callback。member function不行,很自然的想到static function。第二个问题,static function如何能够调用member function,且与之关联的对象(this指针)能够在运行时期(或者用户程序)决定?其一,static function调用member functi原创 2014-06-05 14:07:15 · 1623 阅读 · 0 评论