c++
攻城诗赋
printf("Hello world!");
展开
-
空间换时间--编程小绝招解决电话区号识别算法问题
空间换时间问题通常都是一个不大的问题里的一个不小的解决方案。首先要理解代码中函数的一个大致的代价,在输入比较固定,计算输出又比较费劲的时候,常常就是空间换时间发挥作用的时候了。通过几个简单的例子您就会了解。 在Base64编码过程中,将源字节按规则取位得到一定数量的0~63的数的数组,按规则需要将这些数一一对应固定转换成特定字母数字来得到输出字符串。如果用if……else……的方法,会非常麻烦,代原创 2015-05-17 17:29:33 · 1203 阅读 · 0 评论 -
PortAudio+webrtc+lame实现采集降噪增益mp3
一、使用PortAudio采集 首先你应该下载这个库编出动态库放好头文件和链接库lib,这些都不是重点不赘述。//定义pa的sample类型为int16,这个可以配合webrtc模块#define PA_SAMPLE_TYPE paInt16 //采用双字节,一个sample=sizeof(int)=2字节#define SAMPLE_RATE (32000)原创 2017-10-18 21:53:07 · 1882 阅读 · 4 评论 -
QT通过QAxWidget嵌入IE浏览器并获取页面源码
为什么为了显示微信登录的二维码,引入了整套QtWebEngine,占用非常大的空间。微信登录二维码有自动刷新动作,这些定义在页面脚本中,所以不能直接自绘二维码方式实现,浏览器少不了。主要原理通过COM组件可以调用系统自带的浏览器,当然是IE啦。Qt提供QAxObject和QAxWidget对象帮助访问COM,(与其说帮助,还不如说越帮越忙)怎么做原创 2016-12-07 19:54:10 · 15730 阅读 · 16 评论 -
WIN7+MSVC2013_X86+QT5.7.0编QtWebEngine
背景交代QtWebEngine提供接入Chromium内核做浏览器的便利.通过简易浏览器的制作,逐渐发现Chromium默认不支持mp3 h.264等,所以需要重新设置自己编QtWebEngine模块找到一篇非常对路的文章,我将文章内容结合我实际操作,记录在下面. 原文链接http://blog.csdn.net/saga1979/article/details/51734001操...原创 2016-12-02 23:47:00 · 6403 阅读 · 12 评论 -
DEBUG神器valgrind之memcheck报告分析
valgrind之memcheck报告分析,memcheck怎么运行,memcheck报告怎么看,有哪些常见问题报告,崩溃原创 2015-05-25 15:06:38 · 14008 阅读 · 2 评论 -
回调函数中删除对象引发的隐晦非法访问崩溃问题
回调函数,这里说的是一种笼统的概念,泛指一个对象或者一个过程调用陷入另一个对象或过程。本文想要描述的就是在回调函数中执行释放、删除动作去销毁调用调用者相关联的内容,导致访问非法。下面用一段代码来简述一下这个坑是怎么产生的:class ISomeFace{public: void callback(CBase* pBase)=0;}class CCallee:public I原创 2015-05-18 23:23:51 · 1491 阅读 · 0 评论 -
一点点开始熟悉C++11的新特性
C++11标准由C++标准委员会于2011年8月12日公布,并于2011年9月出版。虽然长期在使用C++,但是对C++11一直处于观望,处于很难用起来(编译器支持等问题),没有很大兴趣去学会的状态。也许风向变到C++11成为主流,才会引起大家的重视和追捧。可是这是常人思维,基本上周围的精英牛人都已经掌握了这些东西,并且已经开始用于工作当中了。 所以这就是我这样的常人和牛人的巨大差别。所以我也要跟上节原创 2015-05-17 17:32:50 · 651 阅读 · 6 评论 -
探究单向链表逆置转向及检查成环的问题
假设链表节点的数据结构为:typedef struct node { int data; struct node* next;}ListNode,*pListNode;要求实现将一个单向链表逆置并检测如果链表成环返回FALSE,从参数返回新的链表头。BOOL Reverse(pListNode& head);这个问题看似简单,实际上太能发挥了。首先因为是单向链表,next不能简单的改原创 2015-05-17 17:27:49 · 789 阅读 · 0 评论 -
RakNet实用介绍
RakNet是一款面向游戏基于UDP的高性能网络库,注意它开源但并非完全免费。主页 http://www.jenkinssoftware.com/ 有一些商业化介绍,通过导航可以找到入门指导(RakNet Manual)、Doxygen文档、论坛论坛支持 http://www.jenkinssoftware.com/forum/ 它的好处在于作者会不定时来扫贴免费答疑解惑,当然你必须用英语,还必须让原创 2015-05-17 21:39:48 · 2975 阅读 · 0 评论 -
一种方便的动态库动态加载机制
动态加载动态库在很多时候的用户体验都比较好,可以检查发现缺失的文件,可以让可选的模块缺失而继续工作。但是动态加载涉及很多函数定义,函数寻址。写来写去非常繁琐且没有技术含量,遇到C++类导出基本没辙。这里我介绍我使用的一种方便使用的动态加载机制。 简单的来说就是将欲导出模块封装成类,定义一个纯虚函数类,模块的实现部分做成纯虚函数类的单例。模块仅导出两个函数,一个是创建模块实例,返回虚基类指针;一个是原创 2015-05-17 21:38:50 · 709 阅读 · 0 评论 -
格式转换说明符scanf,printf格式%大全/格式化输入输出
printf()相信在编程上稍有“浸淫”的都认得它家还有兄弟sprintf,scanf,sscanf…它的格式控制符一般来说懂得%d,%s就差不离了。当你华丽丽的写下char c=’c’;printf(“char=%d”,c);的时候,一切都还是那么美好.可是当你声明一个char buf[2];然后sscanf(“30000”,”%d”,buf);试图识别3万写入buf的时候,就不那么好玩了.本以为转载 2015-05-17 17:55:43 · 1168 阅读 · 0 评论 -
字符串匹配Sunday算法实现
今天稍稍度娘了一下匹配字符串的算法,主要搜索结果还是源自CSDN。其中一篇《字符串匹配算法总结》介绍了好几种字符串匹配算法,写的非常好。我挑了其中作者也比较推崇,比较新,效能比较好,算法又比较简单的Sunday算法,稍加揣摩,然后发现贴的实现代码,居然和算法描述的从右往左比对是冲突的,因此我断定贴的代码是错的。仔细看就能发现从左向右比对,很容易会跳过一种匹配,如从a1a1a2寻找a1a2,就会匹配失原创 2015-05-17 21:27:00 · 592 阅读 · 0 评论 -
C++模板类代码只能写在头文件?
这个问题,实际上我几年前就遇到了。最近写个模板类玩的时候,再次遇到。 当我非常仔细的将定义和实现分开,在头文件中保留了最少的依赖后,一切就绪.cpp单独编过。但是当使用的时候,就会报告所有的函数调用都没有实现。按常规.h/.cpp而言这是不可能的。但是模板类就是这么独特。简单说说他的原因,也备自己将来遗忘: 从语法角度而言,是没有强制要求说模板代码的声明和实现不可以分开。那么当分离的声明和实现写原创 2015-05-17 20:54:24 · 13584 阅读 · 4 评论 -
libev的入门笔记(基本使用)
libev是一个高效的事件库,用来统一信号、定时器、文件IO、网络等需要异步处理的操作方式,提供统一的异步处理框架。以下是官方手册的一个例子: 手册原文地址:http://doc.dvgu.ru/devel/ev.html libev中包括刚才所举的几个内容,都被认为是一种TYPE,经过封装他们的使用方式非常的相似。上图代码中使用到了两种TYPE:io和timer。从main开始看,ev_d原创 2015-05-17 18:01:19 · 3069 阅读 · 0 评论 -
C++自增操作符你真的懂?
虽然使用C++已经长达五年之久,但是对于C++的这个++却实在是一知半解。说来惭愧。 相信所有学过C++的人都知道++C于C++在运算符产生的效果上的异同。那么当一个表达式或者一个语句中出现两次同样的++会是什么样的表现呢? 例如int a=2; int b=(a++)*(a++)等于多少呢? 是4还是6还是8? 最简洁快速的办法就是写代码,让编译器告诉我们答案。于是构造了这么一段代码:in原创 2015-05-17 17:34:33 · 1691 阅读 · 1 评论 -
变速不变调播放mp3-QT-QAudioOutput-lame-sonic
基本原理 有两种变速播放方法,一种是改变playback的频率,例如22050hz采样用44100hz播放。但是这种方法会导致声音快的同时,声调也相应变化,会比较难以接受。 第二种方法,也是本次讨论中用到的办法,通过某种方法(未深究其原理)重新计算声音采样,使其语速变快变慢而音调不变。变速解决方案 &...原创 2018-03-27 19:18:14 · 2062 阅读 · 0 评论