C++
keep_moving_cqu
每天晚上疲劳的睡在床上时才感觉真真切切地过了一天人生最重要的不仅是努力还有方向压力不是有人比你努力而是比你牛叉几倍的人依然比你努力即使看不到未来即使看不到希望也依然相信自己错不了自己选的人生错不了第二天叫醒我的不是闹钟其实还是梦想
展开
-
zip
写个zip工具玩玩。// ZlibTest.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "zip.h"#include "zlib.h"#include "unzip.h"#include "windows.h"#include "iostream"using namespace std;#define原创 2015-11-21 12:23:34 · 586 阅读 · 0 评论 -
内存映射文件详解-----C++实现
先不说内存映射文件是什么。贴个代码先,。#include #include #include #include using namespace std;int main(){ //开始 //获得文件句柄 HANDLE hFile=CreateFile( "c:\\test.dat", //文件名 GENERIC_READ原创 2013-08-17 14:01:59 · 7042 阅读 · 0 评论 -
文件拖拽效果----C++实现
告诉大家三个API函数一切就OK。。。。DragAcceptFiles,DragQueryFile和DragFinish. 下面是我简单的实现。。 我创建的是个mfc工程。。界面放了一个listbox。。成员变量:m_list。在OnInitDialog()中添加: this->DragAcceptFiles(TRUE); 再给这个对话框添加一个WM_DROP原创 2013-08-18 10:06:34 · 4206 阅读 · 0 评论 -
C++ 关键字typeid
在揭开typeid神秘面纱之前,我们先来了解一下RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型,即允许“用指向基类的指针或引用来操作对象”的程序能够获取到“这些指针或引用所指对象”的实际派生类型。在C++中,为了支持RTTI提供了两个操作符:dynamic_cast和typeid。 dynam转载 2013-08-30 13:33:32 · 831 阅读 · 0 评论 -
atoi atol实现
看了atol的实现,发现char到int的转换比较奇怪:c = (int)(unsigned char)*nptr++; 先将char转为unsigned再转为int,于是测试了下,发现有如下结果:void main(){ char c = 0x80; unsigned uc = 0x80; printf("c2i=%x,c2ui=%x,uc2i=%x,uc2转载 2013-08-30 21:02:31 · 1600 阅读 · 0 评论 -
C++基础之---union联合体大小分析
#include using namespace std;union un{ int a[7]; double b; char c[10]; int d[3];};void main(){ cout<<sizeof(un)<<endl;}输出为32。union(共用体)的各个成员是以同一个地址开始存放的,每一个时刻只可以存储一个成员,这样就要求它在分配内存单元时候要原创 2013-09-06 00:13:35 · 3452 阅读 · 0 评论 -
C++基础--------带默认参数的虚函数 静态类型和动态类型分析
// 字串查找.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include using namespace std; class base{ public: base(){ cout"base::base()\n"; } ~base(){ cout"base转载 2013-09-06 01:07:34 · 1002 阅读 · 0 评论 -
C++基础之--------虚拟继承的类对象的空间大小
print?// 含有虚拟继承对象的空间大小.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include using namespace std; class A{ public: protected: private: }; class B{ public: protected: priva转载 2013-09-07 14:03:54 · 961 阅读 · 0 评论 -
C++基础之-------_stdcall,_cdecl区别
在看代码的时候遇到很多_stdcall修饰的函数,不明所以,查了些资料,记录如下:(1) _stdcall调用 _stdcall是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式,被调函数自身在返回前清空堆栈。 WIN32 Api都采用_stdcall调用方式,这样的宏定义说明了问题: #define WINAPI _stdcall 按C编译方式,转载 2013-09-08 01:20:00 · 1000 阅读 · 0 评论 -
链表复习----C++
马上就要找工作了,要复习复习数据结构,看到网上的试题,所以就动手写了写。。这里花了十几分钟写了个链表删除指定node..需求:删除指定学生链表中学生年龄为n的学生。。 #include#includeusing namespace std;typedef struct student{ int id; string name; int age; struct stu原创 2013-08-17 19:12:27 · 1229 阅读 · 0 评论 -
strcpy,memcpy,memmove和内存重叠分析
一:strcpy函数用法和实现: /* GNU-C中的实现(节选): */ char* strcpy(char *d, const char *s) { char *r=d; while((*d++=*s++)); return r; } 有没有发现这个实现并不是很好。。至少没有判断是不是为NULL。一个更好的版本: ch原创 2013-08-16 14:28:55 · 1500 阅读 · 0 评论 -
直接选择排序
#includeusing namespace std;void swap(int* a,int* b){ int temp=*a; *a=*b; *b=temp;}void main(){ int a[]={3,5,7,3,2,4,6,7,9,4,3,24,6,8}; int length=sizeof(a)/sizeof(int); int i; int j;原创 2013-08-23 15:31:14 · 890 阅读 · 0 评论 -
结构体之位域全面分析
结构体的定义 typedef struct TEST{ . . .}Test,*pTest;struct TEST{ . . .}test这里的test是一个TEST变量。。 结构体之位域有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一原创 2013-08-25 00:06:42 · 8379 阅读 · 0 评论 -
dll和exe的共享节------多进程共享dll/exe全局变量
我们都知道同一个应用程序的多个实例之间并不会影响各自的变量,虽然他们的地址空间都是被该应用程序的映像内的物理存储器所提交,他们的数据和代码都是指向了该应用程序的映像,但是他们还是不会影响各自的变量,因为采取了copy-on-write机制,当有一个实例去修改共享的那个数据区的时候,那么操作系统会另外分配一个内存块,该内存块就是存放这个实例修改的数据,所以并不会影响其他的应用程序实例。那么可执行原创 2013-08-25 22:45:35 · 3213 阅读 · 0 评论 -
你所不知道的const------C++
一直对这些东西很感兴趣,但是我们都知道能做项目才是关键,懂这些有个屁用啊。。愿意坚持下去,不管别的人怎么看,那些其他的const的用法,我就不废话了,网上一找一大堆,这里我要说的是一个const 的特性,还有在写代码的时候发现了另外一个有意思的东西。。反正现在在学校也没事,等着找校园招聘啦,所以在这里多写写博客,和大家分享分享。特性:多态。。(重载)大家都知道重载是一种静态多态,编译时多态原创 2013-08-13 18:20:11 · 1279 阅读 · 0 评论 -
灰度图像二值化-----c++实现
前天闲着没事干,就写了写BMP图像处理,感觉大家还比较感兴趣。。所以现在没事,继续更新。。这次简单的写了灰度图像二值化。。这是什么概念呢?图像的二值化的基本原理 图像的二值化处理就是将图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重原创 2013-08-13 16:47:36 · 21470 阅读 · 7 评论 -
const成员函数和非const的成员函数之间的调用
其实这篇文章有点多余,一般我们不会有这样的需求吧。。其实我这里也是基于一个概念:代码重构。举个例子:const char& getText(int i) const 和char& getText(int i),看了上一篇文章的人肯定都知道它们,就直接返回对象中一变量的一个值,就一行代码。非常的简单。。但是我们这里假设:如果在这个函数里面有很长的一段代码,那就不知道会冗长多少代码了,此时一般我们原创 2013-08-13 19:31:15 · 3663 阅读 · 0 评论 -
还原virtual函数的本质-----C++
当你每次看到C++类中声明一个virtual函数,特别是看到了一个virtual的虚构函数。你知道它的意思吗?你肯定会毫不犹豫的回答:不就是多态么。。。在运行时确定具体的行为么。。。完全正确,但这里我要讲的不只是这些东西。 有些类需要虚函数,有些不需要虚函数。这是为什么,一般你看到的类如果有一个虚析构函数,那么这个类中应该会有至少一个是虚函数的。。这是为什么呢??如果我们类中没有用其他虚函数的原创 2013-08-13 22:13:17 · 2213 阅读 · 0 评论 -
空指针、NULL指针、零指针
1. 空指针、NULL指针、零指针1.1什么是空指针常量0、0L、'\0'、3 - 3、0 * 17 (它们都是“integer constant expression”)以及 (void*)0 (我觉得(void*)0应该算是一个空指针吧,更恰当一点)等都是空指针常量(注意 (char*) 0 不叫空指针常量,只是一个空指针值)。至于系统选取哪种形式作为空指针常量使用,则是实现相关的。一转载 2013-09-02 14:39:20 · 6827 阅读 · 2 评论 -
C++编译链接那些事
最近一直在研究编译链接,所以写篇文章总结一下。先来了解几个概念吧:要明白的几个概念: 1、编译:编译器对源文件进行编译,就是把源文件中的文本形式存在的源代码翻译成机器语言形式的目标文件的过程,在这个过程中,编译器会进行一系列的语法检查。如果编译通过,就会把对应的CPP转换成OBJ文件(其实编译好像只是生成一个中间文件,再由汇编器生成obj文件)。 2、编原创 2013-09-09 14:42:06 · 1517 阅读 · 0 评论 -
i++和++i真的没区别么?i+=1和i=i+1真的没区别么
写篇文章记录下小知识点。首先是i++和++i,我这里说的是性能问题,而不是该等于i呢还是等于i+1呢这么基础的问题,其实性能大家仔细想想也很容易知道,++i的性能比i++的性能好,但是我们程序中如果在不受影响的情况下,都会使用i++;其实这是不太好的做法,至少性能上稍微不太好。++i模拟:int fuction(){ i=i+1; return i;原创 2013-08-21 14:53:51 · 5171 阅读 · 2 评论 -
c++中临时变量不能作为非const的引用参数
试看下面的代码:#include using namespace std; void f(int &a) { cout } void g(const int &a) { cout } int main() { int a = 3, b = 4; f(a + b); //编译错误,把临时变量作为非const的引用参数传递了 g(a + b转载 2013-09-25 19:04:15 · 1483 阅读 · 0 评论 -
类函数指针和普通函数指针
我们都看惯了一般的函数指针,但是关于类的函数指针又是怎样的呢?它的静态函数指针和非静态函数指针是一样的么?#includeusing namespace std;typedef int(*pMax)(int,int);//普通函数指针int max(int a,int b){ return a>b?a:b;}class A{public: int min(in原创 2013-10-25 02:00:02 · 1398 阅读 · 0 评论 -
C++对象模型之拷贝构造函数
拷贝构造函数(copy constuctor)通常C++初级程序员会认为当一个类为没有定义拷贝构造函数的时候,编译器会为其合成一个,答案是否定的。编译器只有在必要的时候在合成拷贝构造函数。那么编译器什么时候合成,什么时候不合成,合成的拷贝构造函数在不同情况下分别如何工作呢?这是本文的重点。拷贝构造函数的定义有一个参数的类型是其类类型的构造函数是为拷贝构造函数。如下:X::X(转载 2013-11-10 01:27:57 · 964 阅读 · 0 评论 -
编译链接之----地址无关代码(PIC)总结
动态链接的进程空间分布:动态链接库的最终装载地址在编译的时候并不能确定,而是在装载时,装载器根据当前进程地址空间的空闲情况,动态的分配一块足够大小的地址空间给动态链接库。这样对地址的引用就可以采用地址重定位的方式来解决了。就向静态库那样在静态链接时通过修改指令进行静态重定位,我们的动态链接很容易也想到用装载重定位来进行动态重定位,这样就不用管它到底是装载到哪个地址啦。因为我们的指令地址和数据相原创 2013-11-10 01:28:22 · 5687 阅读 · 0 评论 -
启动控制台程序,重定向输入输出流
新建一个win32项目,加入下面这些代码就可以启动控制台程序,并且重定向输出流到控制台程序AllocConsole(); _hwndConsole = GetConsoleWindow(); if (_hwndConsole != NULL) { ShowWindow(_hwndConsole, SW_SHOW);原创 2015-11-14 23:14:17 · 1423 阅读 · 0 评论 -
带参数启动另外一个exe程序
上一篇讲了怎么启动控制台程序,并且指定输出流到控制台。本篇还是以上一篇文章的win32项目来作为被启动的程序。新建一个控制台程序:有多种方式启动另外一个exe程序,不懂就百度一下吧。void testConsole(){ ShellExecute(NULL,"open","F://project//cpp//CppAllTest//Debug//CppWinTest.exe",原创 2015-11-15 01:27:02 · 6855 阅读 · 1 评论 -
cocos2d 一个坑爹的内存泄露
看以下事例代码:auto node1 = Sprite::create("CloseNormal.png");node1->setName("node1");auto action1 = ScaleTo::create(1.0,0.5);auto node2 = Sprite::create("CloseNormal.png");node2->runAction(action1);原创 2015-11-17 22:45:20 · 5963 阅读 · 0 评论 -
贪心算法--哈夫曼编码问题
1、问题描述 哈夫曼编码是广泛地用于数据文件压缩的十分有效的编码方法。其压缩率通常在20%~90%之间。哈夫曼编码算法用字符在文件中出现的频率表来建立一个用0,1串表示各字符的最优表示方式。一个包含100,000个字符的文件,各字符出现频率不同,如下表所示。 有多种方式表示文件中的信息,若用0,1码表示字符的方法,即每个字符用唯一的一个0,1串表示。若采用定长编码表转载 2013-09-30 14:30:32 · 3279 阅读 · 1 评论 -
虚函数与private
我们把一个仅仅含有纯虚函数的类称为接口,我们也好像已经习惯了将这个接口中的所有纯虚函数全声明为public,而且按照这样的设计,一切都工作得不错。比如COM正是这样做的,它的接口中几乎不会存在private的纯虚函数。那么,让我们想一想,纯虚函数或者虚函数可以为private吗?如果这种方式是可行的,那么什么时候可以将(纯)虚函数设为private了?这些都是本文将要讨论的主题。一起来看看。一转载 2013-09-04 02:05:37 · 760 阅读 · 0 评论 -
C++中的显式构造函数
有如下一个简单的复数类:class ClxComplex{public: ClxComplex(double dReal = 0.0, double dImage = 0.0) { m_dReal = dReal; dImage = dImage; } double GetReal() const { return m_dReal; } doubl转载 2013-09-04 03:15:11 · 768 阅读 · 0 评论 -
windows内存分配总结
HeapAlloc VirtualAlloc GlobalAlloc LocalAlloc new malloc区别1. HeapAlloc:MSDN上的解释为:HeapALloc是从堆上分配一块内存,且分配的内存是不可移动的(即如果没有连续的空间能满足分配的大小,程序不能将其他零散的空间利用起来,从而导致分配失败),该分配方法是从一指定地址开始分配,而不像GloabalAlloc是从全局转载 2013-09-11 13:07:13 · 3032 阅读 · 0 评论 -
static_cast、dynamic_cast reinterpret_cast和const_ cast
关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。stat转载 2013-09-05 12:54:40 · 694 阅读 · 0 评论 -
STL中mem_fun和mem_fun_ref的用法
怎么对容器中的所有对象都进行同一个操作?我们可能首先想到的是用循环来实现。比如有如下的一个类:class ClxECS{public: int DoSomething() { cout return 0; };};现在定义如下一个vector:vector vECS;for(int i = 0; i转载 2013-09-05 00:20:51 · 844 阅读 · 0 评论 -
vector的大小sizeof(vector<T>)
#include #include using namespace std; struct Node { int id; vector score; }; void DisplayVector(vector &v) { cout<转载 2013-09-05 22:08:24 · 2558 阅读 · 0 评论 -
rand函数和srand函数
首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明。rand(产生随机数)表头文件: #include定义函数 :int rand(void)函数说明 :因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND转载 2013-09-30 13:52:40 · 1002 阅读 · 0 评论 -
printf函数与cout参数压栈顺序问题
对于VC++编译环境:printf函数与cout: 输入顺序是从右到左, 输出顺序从左到右.例1:#includevoid main(){ int i=2; printf("%d,%d,%d,%d\n",i++,++i,i,i++); printf("%d\n",i);}输出结果:3,3,2,25解释:1、printf函数输入转载 2013-09-30 14:26:48 · 1376 阅读 · 0 评论 -
冒泡排序
#includeusing namespace std;void swap(int* a,int* b){ int temp=*a; *a=*b; *b=temp;}void main(){ int a[]={3,5,7,9,1,4,7,0,10,38}; int length=sizeof(a)/sizeof(int); int i; int j; for(i=0;i原创 2013-08-23 13:53:31 · 954 阅读 · 0 评论 -
C++知识点补强之----数组作为参数传递
今天写了几个排序,发现对数组作为参数传递还不是很熟练啊,刚起来,脑袋还不是很清醒。所以在这里总结复习一下这个小知识点。。#includeusing namespace std;void test1(int a[]){ cout<<"int test1 fuction:"<<" "<<sizeof(a)<<endl;}void test2(int (&原创 2013-08-23 16:05:43 · 1297 阅读 · 0 评论 -
BMP图像旋转----C++实现
如果前面几个实验都做过了的,做这个应该很简单,今天也是看到图像相关的文章,所以也就复习了一遍,以前也就是知道原理,没编过,这次就都完成了吧。。下面我做的是一个BMP图像旋转的实验。(我选的是180,相对来说比较简单)。我的代码:#include#include using namespace std;void main(){ FILE* stream=fopen("D:原创 2013-08-12 03:24:12 · 8186 阅读 · 6 评论