随笔分类 - C++
摘要:这些形象的小图片给我们最直观的印象排序算法显神威方法其实很简单:分别从初始序列“6 1 2 7 9 3 4 5 10 8”两端开始“探测”。先从右往左找一个小于6的数,再从左往右找一个大于6的数,然后交换他们。这里可以用两个变量i和j,分别指向序列最左边和最右边。我们为这两个变量起个好听的名字“哨兵...
阅读全文
摘要:实现一个算法,确定一个字符串的所有字符是否全部相同?最想想到的方法是通过比较该字符串的每一个字符,算法的时间复杂度为0(n2)次。另一种办法是可以利用set数据结构来实现,因为在set中不允许存在重复的字符。有一个有意思的地方是在进行判断前可以先判断字符串的长度,如果字符串的长度大于256,那么我们...
阅读全文
摘要://强制退出QQ的程序软件#include <iostream>#include <stdio.h>#include <string>#include <windows.h>#include <tlhelp32.h>using namespace std;string str_exp="explorer.exe";string str_qq="QQ.exe";bool TerminateProcessFromId(long Id){ bool bRet = false ; //打开目标进程,取得
阅读全文
摘要:在控制台应用程序中,SetTimer的函数原型为:UINT_PTR SetTimer( HWND hWnd, // handle to window UINT_PTR nIDEvent, // timer identifier UINT uElapse, // time-out value TIMERPROC lpTimerFunc // timer procedure);具体的解释可以看MSDN,主要是第四个参数,定义的参数类型为 TIMERPROCVOID CALLBACK TimerProc( HWND hwnd, ...
阅读全文
摘要:在Windows中,系统为大家提供了很多种内存的分配方式,包括new,malloc(),HeapAlloc(),VirtualAlloc()等,那么它们的区别是什么呢?彼此有没有联系呢?下面对此来做个比较和总结。(1)new是C++的运算符,操作的是默认堆,具备编译器可控制的操作,可以完成C++类对象的构造,适合小型数据的内存分配,操作简单方便。(2)malloc是c提供的库函数,操作的是默认堆,适合小型数据的内存分配,操作简单方便。(3)HeapAlloc操作的是默认的堆或自定义堆,效率高,适合小型数据或中型数据内存分配(4)VirtualAlloc()操作的是虚拟内存,适合大型数据的内存分
阅读全文
摘要:一、基本概念二分法又叫对半查找。数学模型表示如下:(维基百科) 若要求已知函数f(x) = 0 的根 (x的解),则:先找出一个区间[a,b],使得f(a)与f(b)异号。根据介值定理,这个区间内一定包含着方程式的根。求该区间的中点,并找出f(m) 的值。若f(m) 与f(a) 正负号相同则取 ...
阅读全文
摘要:在实现绘图的过程中,显示的图形总是会闪烁,笔者曾经被这个问题折磨了好久,通过向高手请教,搜索资料,问题基本解决,现将文档整理出来以供大家参考.1.显示的图形为什么会闪烁 我们的绘图过程大多放在OnDraw或者OnPaint函数中,OnDraw在进行屏幕显示时是由OnPaint进行调用的。当窗口由于任何原因需要重绘时,总是先用背景色将显示区清除,然后才调用OnPaint,而背景色往往与绘图内容反差很大,这样在短时间内背景色与显示图形的交替出现,使得显示窗口看起来在闪。如果将背景刷设置成NULL,这样无论怎样重绘图形都不会闪了。当然,这样做会使得窗口的显示乱成一团,因为重绘时没有背景色对原来绘制.
阅读全文
摘要:添加引用#include <iostream>using namespace std;AllocConsole();freopen("CONIN$", "r", stdin );freopen("CONOUT$", "w", stdout);freopen("CONERR$", "w", stderr);cout << "启动控制台/n/n";在析构函数中调用FreeConsole();intmain(intargc,char*ar
阅读全文
摘要:一.关于内存 1、内存分配方式 内存分配方式有三种: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (3) 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。 2.内存使用错...
阅读全文
摘要:VC 6.0常见断言错误总结断言所在函数具体位置意义ASSERT(m_hWnd==NULL)CWnd::Attach()WINCORE.CPP文件中的第320行这个断言通常可能是由于试图把一个已经捆绑(attach)过的窗口捆绑在其他的对象上,只能有一个MFC对象能够捆绑到一个窗口上--不然,消息映射就会不正常ASSERT((dwStyle& WS_POPUP) == 0)CWnd::Create()WINCORE.CPP文件中的第747行起因是由于使用Create()函数时试图赋予WS_POPUP风格没,但是不支持的,想要这种风格应该用CreateEx()函数ASSERT(pMap!
阅读全文
摘要:但是有个函数可以轻松实现,就是SetLayeredWindowAttributes,运用这个函数便可轻松实现窗口透明效果。简单介绍一下SetLayeredWindowAttributes,详见msdn。BOOL SetLayeredWindowAttributes(HWND hwnd, // handle to the layered windowCOLORREF crKey, // specifies the color keyBYTE bAlpha, // value for the blend functionDWORD dwFlags // action);Windows NT/200
阅读全文
摘要:http://blog.csdn.net/FreeBot/archive/2009/11/18/4826204.aspx问:#define ABC L"ABC"L 宏是干什么用的,和Unicode相关吗?如果这样,这和#define ABC _T("ABC")有分别吗?答:L表示UNICODE串,比如wchar_t* str = L"yangsongx";_T在ANSI编译模式下表示ANSI串,在UNICODE下表示UNICODE串,比如TCHAR* str = _T("yangsongx");在ANSI下编译就是
阅读全文
摘要:概述 VC++是微软公司开发的一个IDE(集成开发环境),换句话说,就是使用c++的一个开发平台.有些软件就是这个编出来的...另外还有VB,VF.只是使用不同语言...但是, vc++是Windows平台上的C++编程环境,学习VC要了解很多Windows平台的特性并且还要掌握MFC、ATL、COM等的知识,难度比较大。Windows下编程需要了解Windows的消息机制以及回调(callback)函数的原理;MFC是Win32API的包装类,需要理解文档视图类的结构,窗口类的结构,消息流向等等;COM是代码共享的二进制标准,需要掌握其基本原理等等。 VC作为一个主流的开发平台一直深...
阅读全文
摘要:http://www.cnblogs.com/zlja/archive/2010/06/30/2449147.html下面是个关于递归调用简单但是很能说明问题的例子:/*递归例子*/#include<stdio.h>void up_and_down(int);int main(void){ up_and_down(1); return 0;}void up_and_down(int n){ printf("Level %d:n location %p/n",n,&n); /* 1 */ if(n<4) up_and_down(n+1); print
阅读全文
摘要:(1)从char*转换: char *chars = "Hello";从char*到string: string s(chars);从char*到CString:CString s(chars);从char*到String^:String ^s = gcnew String(chars);//////////////////////////////////////////////////////////////////////////////////////////(2)从string转换 string str("Hello");从string到char
阅读全文
摘要:#include <iostream>using namespace std;class Person{public:virtual ~Person() //加了virtual,讲析构函数声明为虚函数{ cout << "Person::~Person()" << endl;}};class Student : public Person{public:~Student() // virtual可加可不加{ cout << "Student::~Student()" << endl;}...
阅读全文
摘要:在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之。一、流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在头文件stdio.h中定义如下:typedef struct { int level; /* fill/empty level of ...
阅读全文
摘要:1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。从作用域看:1>全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。2>静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。3>局部变量也只有局部作用域,它是自动对象(aut
阅读全文
摘要:转自:whyhappy:http://www.programfan.com/blog/article.asp?id=6030函数名与函数指针一 通常的函数调用一个通常的函数调用的例子://自行包含头文件void MyFun(int x);//此处的申明也可写成:void MyFun( int );int main(int argc, char* argv[]){MyFun(10);//这里是调用MyFun(10);函数return 0;}void MyFun(int x)//这里定义一个MyFun函数{printf(“%d\n”,x);}这个MyFun函数是一个无返回值的函数,它并不完成什么事
阅读全文