随笔分类 - [30]C++
-
C++代码评审(Code Review)等级标准
摘要:C++代码评审(Code Review)等级标准C++代码评审(Code Review)等级标准0前言记录的问题都是来源于平常C++编码过程之中常见或基础的缺陷。只是由个人整理而成的标准,用于平常代码编写中的“扫雷”,没有权威性,现应用于我的开发团队。后续的补充完善还是一个漫长的过程。程序员要善于记录和总结,这样才能成长和提升。1简介代码评审定义:通过阅读代码检查代码缺陷的质量保证过程。代码评审内容:编程规范,重构方法,架构设计,性能安全,日志,可读性,扩展性。。。代码评审好处:及早发现编码缺陷,分析编码缺陷,提升代码质量,提高编码水平,促进团队合作。。。代码评审形式:代码走读,代码讲解,结对 阅读全文
-
深入理解C语言函数指针
摘要:深入理解C语言函数指针示例1:void myFun(int x); //声明也可写成:void myFun( int );int main(){ myFun(100);//一般的函数调用 return 0;}void myFun(int x){ printf("myFun: %d\n",x);}我们一开始只是从功能上或者说从数学意义上理解myFun这个函数,知道myFun函数名代表的是一个功能(或是说一段代码)。函数名到底又是什么东西呢?函数指针变量一个数据变量的内存地址可以存储在相应的指针变量中,函数的首地址也以存储在某个函数指针变量中。这样,我就可以通过这个函数指针.. 阅读全文
-
标准模板库使用入门之顺序容器小记
摘要:标准模板库使用入门之顺序容器小记STL中的顺序容器有: vector //支持快速随机访问 list //支持快速插入删除 deque //双端队列顺序容器适配器: stack //LIFO queue //FIFO priority_queue //有优先级管理的队列我不是很明白adapter适配器的意思。这个词太布宜诺斯艾利斯了。以前接触到的有电源适配器,网络适配器,等等,在我的脑子里直接会被替换成另一个词汇,比如变压器,网卡之类的。估摸着大概就是特殊应用的工具这种意思。言归正传, 重复造轮子一直以来都是我乐此不疲的事情,所以... 阅读全文
-
大根堆,小根堆,堆排序
摘要:大根堆,小根堆,堆排序大根堆: 根节点value不小于子节点的value,满足这条性质的二叉树即为大根堆。小根堆:根节点value不大于子节点的value,满足这条性质的二叉树即为小根堆。从大根堆的定义可知:在大根堆里要得到最大值只需o(1)的时间。所以很明显,大根堆可以求最大值和维护前k小的数。注意是前k小的数,不是前k大的数,因为当前要插入到堆里的数可以直接和堆里最大值考虑,如果比堆里最大的都还要小,那就那这个值放到堆里,这样就维护了前k小的数。如果k很大的话,要划分为很多个堆。小根堆和大根堆相反。堆的操作主要有:bool isEmpty(int *a); // 判断堆是否为空bool i 阅读全文
-
STL学习笔记-- string
摘要:STL学习笔记-- stringstring 基本字符序列容器 C语言并没有提供一个专门的字符串类型,需要通过字符数组,对字符串进行存储和处理。字符数组的末尾是一个值为 0 的 null 字符,表示字符串的结束。从而,一个用于存储 n 个字符的字符数组,字符个数为 n+1 。基于这样的字符数组,就可实现字符串的字符添加、删除、搜索、替换、连接和子串操作等。 在标准 C++ 中,字符串类 string 由 C++ STL 实现,提供丰富的字符串的处理功能。string 是一个基于字符的序列容器,具有vector向量容器一样的内部线性结构,字符逐一写入容器,最后以 null 字符结束。虽然 vec 阅读全文
-
STL学习笔记-- multimap
摘要:STL学习笔记-- multimapmultimap 多重映照容器 multimap 与 map 一样,都是使用红黑树对记录型的元素数据,按元素键值的比较关系,进行快速的插入、删除和检索操作,所不同的是 multimap 允许将具有重复键值的元素插入容器。在 multimap 容器中,元素的键值与元素的映照数据的映照关系,是多对多的,因此,multimap 称为多重映照容器。multimap 与 map 之间的多重特性差异,类似于 multiset 与 set 的多重特性差异。 multimap 多重映照容器实现了 Sorted Associative Container 、Pair Asso 阅读全文
-
STL学习笔记-- map
摘要:STL学习笔记-- mapmap映照容器 map映照容器所处理的元素数据,与数据库表的具有键值的记录非常相似,由一个键值和其他若干数据(映照数组)组成,键值和映照数据之间,可建立一个数学上的映照关系,由此而得映照容器的名称。容器的数据结构同样是采用红黑树进行管理,插入的元素键值不允许重复,所使用的节点元素的比较函数,只对元素的键值进行比较,元素的各项数据可通过键值检索出来。 map 映照容器是一种关联容器,实现了 Sorted Associative Container 、Sorted Associative Container 、 Unique Associative Container 概 阅读全文
-
TL学习笔记-- multiset
摘要:TL学习笔记-- multisetmultiset 多重集合容器 与 set 集合容器一样, multiset 多重容器也使用红黑树组织元素数据,只是 multiset 容器允许将重复的元素键值插入,而 set 容器则不允许。multiset 容器实现了 Sorted Associativate Container 、Simple Associative Container 和 Multiple Associative Container 概念的接口规范 在用 multiset 的时候,同样需要引用头文件 "#include <set>" 说得通俗点,multi 阅读全文
-
一个关于兑换零钱的豆瓣笔试题
摘要:一个关于兑换零钱的豆瓣笔试题 前几天做了个豆瓣笔试题,时间是90分钟,共有6题,要做4道,难度如果没看过类似的着实做起来太慢了。由于豆瓣上面的邮件说不要泄露(还有人会在后期笔试),所以拖到现在才写博客。我先把题目贴出来:将10000块钱兑换成由5000块、2000块、1000块、500块、100块、50块、10块、5块、1块的组成的零钱,问有多少种兑换方式? 这个题,如果朋友们没做过,或许最开始就跟我一样,钱有9种,就做个9重循环,各层累加,当总钱等于10000时就计数器加1,这样是很简单没错,可惜在这数据量的前提下,我用c跑了5、6分钟也没跑出来,于是中止了这种天真的想法。但是还是有必要.. 阅读全文
-
STL学习笔记-- set
摘要:STL学习笔记-- setset集合容器 set集合容器使用一种称为红黑树(Red-Black Tree) 的平衡二叉检索树的数据结构,来组织泛化的元素数据。每个节点包含一个取值红色或黑色的颜色域,以利于进行树的平衡处理。作为节点键值的元素的插入,必须确保每个子树根节点的键值大于左子树所有节点的键值,而小于右子树所有节点的键值。不会将重复的键值插入容器,也不需要指定具体的插入位置,而按元素在树中的关联关系,进行位置检索和插入,元素的删除亦然。 元素数据的检索,使用的是二叉检索树的中序遍历算法,检索的效率高于 vector 、 deque 和 lsit 等容器。由于采用中序遍历算法可将二叉检索树 阅读全文
-
HookApi例子
摘要:Windows 7 64位 HookApi例子 本程序HOOK的API是DispatchMessageA和DispatchMessageW。在HOOK的方法内会还原ESP,调用user32.DispathMessage(A或W)之后再修改ESP,实现的功能是记录消息的详细日志,记录哪个窗口处理过哪些消息。 1、新建一个win32 console项目,取名为DoInjection,新建一个DoInjectionMain.h,代码如下:?1234567891011121314151617181920212223BOOLSetPrivilege(LPCTSTRlpszPrivilege, BOO.. 阅读全文
-
deque 双端队列容器
摘要:STL学习笔记-- dequedeque 双端队列容器 ( double-ended queue ) 与 vector 非常相似,不仅可在尾部插入和删除元素,还可以在头部插入和删除,算法的时间复杂度也是常数阶 O(1),是一个实现了 Random access container 、Back insertion sequence 和 Front insertion sequence 概念的模型。 deque 内部的数据机制和执行性能与 vector 不同,一般来说,当考虑到容器元素的内存分配策略和操作的性能时,deque 相对 vector 有优势。 deque 的 C++ 标准头文件为 de 阅读全文
-
C#引用C++开发的DLL
摘要:C#引用C++开发的DLL.Net 开发中如果使用外部DLL,一般引用进来就可以了,最多引用前将DLL注册一下。最近做的项目中需要使用硬件厂家用C++开发的DLL,我还照原来的方式引用却报错,一步步用下来却发现原来还有这么多技巧需注意。下面是我所遇到的问题及解决的方法,希望能对大家有用。1.在Visual Studio中引用C++写的DLL时报以下错误:未能添加引用,请确保此文件可访问并且是一个有效的程序集或COM组件。手工注册该DLL也报错:模块已加载,但找不到入口点DLLRegisterServer, 请确保XXX为有效的DLL或OCA文件,然后重试。经查询发现C++编译的DLL并不一定能 阅读全文
-
STL学习笔记--vector
摘要:STL学习笔记--vectorvector 向量容器 作为数组的一个泛化推广的 vector 容器,不仅可以进行数组一样的元素随机访问,还可以在容器的尾端插入新元素,是一个实现了 Random Access Container 和 Back Insertion Sequence 概念的模型 vector 是一种简单、高效的容器。在尾端插入和删除元素,算法时间复杂度为 O(1) 常数阶,其他元素的插入删除为 O(n) 线型阶,其中 n 为 vector 容器的元素个数。 vector 具有自动的内存管理功能,对于元素的插入和删除,可动态调整所占用的内存空间。创建 vector 对象如下4个vec 阅读全文
-
Gsoap使用心得
摘要:最近用到vc mfc 调用c#写的wcf 发布的webservice 上传文件.服务器端接收object 类型的byte[]数组。 我本来还以为vs2010中vc能象c#一样方便的使用web service(记得vs2005,vs2008的vc clr 可以直接增加引用),可是找了半天头大了!! 网上找了下,大家都是用的gsoap,但是能查到的资料,都是接收简单数据的,于是效仿,对gsoap生成的代理类,和数据类型研读,问题解决了。1、 先了解一下Gsoap gSOAP一种跨平台的C和 C++软件开发工具包。生成C/C++的RPC代码,XML数据绑定,对SOAP Web服务和其他应用形成高.. 阅读全文
-
APL平台对C++开发者的价值和作用
摘要:APL平台对C++开发者的价值和作用前两天我请二哥对博客提意见, 他讲了网站上APL平台太大, 不太容易让人真正搞懂, 并且缺乏具体的点抓住开发者.我根据这个意见, 计划写系列文章, 阐述各个层次的开发者如何利用APL平台, 以使大家更了解APL平台. 作者设计APL平台主要动机是为C++程序员找到一种正确的C++做前端产品的发展方向( 在保持C++的高效执行效率的情况, 而又能够满足前端应用变化无常的UI需求,并且做到快速高效的开发响应, 克服C++在这部分的缺陷. ), 因此作者讲解的第一篇文章主题是: C++开发者 利用APL平台能有什么价值和作用. 好, 不讲废话, 直接上菜(作者为. 阅读全文
-
发布本人所有博客文章中涉及的代码与工具(大部分是C++和Java)
摘要:发布本人所有博客文章中涉及的代码与工具(大部分是C++和Java)有些内容已更改,对旧文重新编辑并再次发布,望见谅) 为了更方便地管理博文中涉及的各种代码与工具资源,现在把这些资源迁移到 Google Code 中,有兴趣者可前往下载。C++1、《高性能 Windows Socket 服务端与客户端组件(源代码及测试用例下载)》 《基于 IOCP 的通用异步 Windows Socket TCP 高性能服务端组件的设计与实现》 《通用异步 Windows Socket TCP 客户端组件的设计与实现》 摘要:编写 Windows Socket TCP 客户端其实并不困难,Windows... 阅读全文
-
FileSystemObject (FSO)对象方法总结及应用
摘要:FileSystemObject (FSO)对象方法总结及应用FileSystemObject (FSO)组件可以用来处理系统驱动器,文件夹,和文件。因为它是一个ActiveX控件,所以它能被js,vbs等文件使用,以实现对机器文件系统的操作。下面将总结一下FSO中的对象和方法,其实FSO中大多数的方法都能顾名思义,很简单,所以对于大多数函数都只是简单的罗列一下。一.新建FileSystemObject对象var fso = new ActiveXObject("Scripting.FileSystemObject");注意:FileSystemObject对象只能创建一次 阅读全文
-
VirtualMouse
摘要:[开源] C语言项目实战 - 虚拟鼠标 - VirtualMouseC语言项目实战 - 虚拟鼠标 - VirtualMouse目录关于软件软件介绍使用帮助项目介绍源码及软件下载知识点扫描热键的使用鼠标事件的模拟字体的选用开机自启动的设置为软件添加版本信息想不到的事不翼而飞的按钮360, 你这是要闹哪样?笔者的话未解决的问题结束语软件介绍VirtualMouse是一款简单的通过键盘模拟鼠标行为的软件, 使用 BSD 开源协议, 软件采用 C语言 + Windows API 进行编写, 程序仅 20KB, 对资源消耗极低, 在一定程度上能够代替实体鼠标对 Windows 进行相关的操作。软件截图: 阅读全文
-
Effective C++函数参数传递方式
摘要:C++函数参数传递方式(Effective C++之20, 21)1. 引用传递与值传递的选择2. 返回值的传递1.引用传递与值传递的选择熟悉C++的人都知道,C++中函数参数的默认传递方式是值传递(pass-by-value),这种传递方式的好处是在函数内部使用的是实参的一个副本,在函数内部对其操作不会影响实参的值。但是我们也知道,对象的拷贝是会有时间和空间消耗的,而且如果对象所占空间很大的话,以值来传递参数很可能相当费时而极大程序的限制了程序的性能。C++提供了一种高效的对象传递方式:引用传递。自定义类型使用值传递带来的问题:第一,传递对象的效率低。传递对象会调用对象的构造函数,造成时间和 阅读全文