- 博客(214)
- 资源 (10)
- 收藏
- 关注
原创 MFC接受 keyDown消息
在一个对话框程序当中,当对话框上没有任何一个控件,可以截获到keyDown消息;但是当对话框上加入任何一个控件之后,就不会像刚才那样截获到消息:如果要截获键盘消息:可以重载函数PreTranslateMessage(MSG* pMsg) if(pMsg->message == WM_KEYDOWN) { MessageBox("Hello","测试",MB_
2014-12-22 17:44:09 4239
原创 C++算法之 二维数组的查找
题目:在一个二维数组当中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组当中是否含有该整数。 思路:1 2 8 92 4 9 124 7 10 13 6 8 11 15每一行递增,如果右上角的数字小于要找的数字,那么这一行所有的数字都
2014-12-22 14:18:50 3424
原创 C++算法之 替换数组空格
题目:请实现一个函数,把字符串中的每个空格替换为"%20",例如输入"We are happy",则输出 "We%20are%20happy" 方法1: 重新申请一个数组,然后遍历原来的数组,遇到空格,就用%20填充新的数组,最后得到结果;缺点:要重新申请数组方法2: 从前往后遍历,遇到空格就把后面的内容向后移动两位;缺点:有些内容会向后移动n次,如果有n个空格,算法时间复杂度为O(n
2014-12-22 11:18:43 2679
原创 win32 带登录界面的最简单版本计算器
最简单的加减乘除计算,目的是为了复习win32的用法:界面: 制作步骤:第一步:建立一个win32工程第二步:插入两个对话框 登录对话框 和 计算对话框第三步:编写代码实现即可,主要就是熟悉win32 的几个api函数:// 1218.cpp : Defines the entry point for the console application.
2014-12-19 10:56:14 2930 1
原创 C++ 算法之 输入两个整数m n,求计算需要改变m的二进制表示中的多少位才能得到n
思路:先把m与n进行异或运算,再统计异或结果当中的1的个数;异或:相同为0,不同为1; 0^0 = 0; 1^1 = 0; 0^1 = 1; 1^0 = 1;比如10 : 1010 ; 13:1101;10^13 ------> 1 0 1 0 1 1 0 1结果 0 1 1
2014-12-18 09:33:20 2265
原创 C++算法之 一句话判断一个整数是不是2 的整数次方
思路:一个整数如果是2的整数次方,那么它的二进制表示中有且只有一位是1,而其他所有位都是0。把这个整数与这个整数减去1之后进行与运算,那么这个整数当中唯一的1会变为0,这个整数也变为0;代码:// Is2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;bool is
2014-12-18 09:27:18 4037
原创 求一个整数中二进制1的个数
题目:求一个整数二进制表示1的个数 第一版:思路:如果一个整数与1做与运算,结果为1,那么该整数最右边一位是1,否则是0;int NumberOf1(int n){ int count = 0; while (n) { if (n&1)//如果一个整数与1做与运算的结果是1,表示该整数最右边是1,否则是0; { count++; }
2014-12-18 08:55:20 3712
原创 MFC当中用到的icon文件图片怎么制作?
今天学树形控件TreeContral 的时候要用到icon图片,到网上下载了几个图片导入发现有问题,最后百度找了一款制作icon图片的工具Axialis IconWorkshop;下载就可以制作icon图片!
2014-12-17 16:45:01 5052
原创 C++ 算法之 查找链表中间节点
解析:设立两个指针,p每次移动两下,q每次只移动一下,那么当p指向最后一个节点的时候,那么q就是中间的节点了ListNode* FindMidNode(ListNode* pHead){ if (pHead == NULL) { return NULL; } if (pHead->m_pNext == NULL || pHead->m_pNext->m_pNext =
2014-12-16 15:34:31 2881
原创 C++ 算法之 是否为环形链表
如果有两个头结点指针,一个走的快,一个走的慢,那么若干步以后,快的指针总会超过慢的指针一圈。 bool IsCycleList(ListNode* pHead){ if(pHead== NULL) return false; if (pHead->m_pNext == NULL) { return false; } ListNode* pFastNod
2014-12-16 15:32:34 2029 1
原创 C++算法之 链表中倒数第k个节点
题目:输入一个链表,输出链表中倒数第k个节点,为了符合大多数人的习惯,本题从1开始计数,即链表的尾巴节点是倒数第一个节点。方法1:先遍历链表得到链表的个数n,倒数第k个节点就是n-k+1再遍历一次链表,找到第n-k+1个节点就是倒数第k个节点;这种方法遍历两次链表;方法2:先遍历链表把链表压入一个栈,再出栈,第k次出栈就是第k个节点;方法3:先反转链表,再遍历方法4:定义两个指针,
2014-12-16 15:31:23 4479
原创 C++ 算法之快速排序
快速排序的思想: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 主要思路: 先从后面开始遍历找到比key值小的一个值,把这个值放到key的前面,再从前面开始遍历找比key大的值; 代码如下:// QuickS
2014-12-16 15:29:17 924
原创 C++算法之 二分查找
二分查找:二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。代码不多也就几行;主要 start = 0; end = nLength -1;while(start #include using namespace std; /* run this program using the console pauser
2014-12-14 21:27:16 7917 1
原创 C++算法之 倒序输出一个链表
题目:给定一个头结点,倒叙输出一个链表 解法1:先将链表反转,在遍历输出解法2:不修改链表自身的结构,动态申请一段空间,申请一个指针数组,数组内存放的指针指向链表的每个值,再遍历数组输出:void PrintListBack(ListNode* head){ int n = GetLength(head); ListNode** p = new ListNode*[n+
2014-12-12 15:12:42 9243 1
原创 C++算法之 反转单链表
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点,链表节点定义为:struct ListNode{ int m_nValue; ListNode* m_pNext;};算法思路:链表 1-->2-->3-->4-->5建立一个 pPrev节点,而且为空节点; pPrev = NULL;再建立一个节点pNode =
2014-12-12 14:10:06 16341 1
原创 CString 没有SetWindowText
CString 没有SetWindowText 错误原因: 建立控件变量的时候选择了值变量 value 而不是 contral value值变量与控件绑定在一起,一般用于与控件之间传递数据 UpdateData(true)orfalse contral变量是一个完整的控件实例对象,拥有该控件的一
2014-12-11 16:37:40 1997
转载 控件中添加的成员变量value和control的区别 .
control型变量是这个控件所属类的一个实例(对象)可以通过这个变量来对该控件进行一些设置。而value只是用来传递数据,不能对控件进行其它的操作。control型变量可以获得控件的实例,通过这个变量,你可以操纵控件value型变量仅仅可以获得该控件的public型变量 如果你添加了一个m_CtrlEdit的control型变量你可以调用控件支持的所有函数,如: m_Ct
2014-12-11 16:30:20 3846
原创 VS2012 使用CStatic类显示图片
CStatic显示图片:CStatic类提供了一个Windows静态控件的性能;一个静态控件用来显示文本字符串,框图标,位图。构造函数CStatic::CStatic()初始化Create 创建Windows静态控件并将它与该CStatic对象连接 CStatic::CreateBOOL Create( LPCTSTR lpszText, DWORD dwS
2014-12-11 15:33:30 7719 1
原创 VS2012:LoadBitmap(IDB_BITMAP1) -- 未定义标识符 IDB_BITMAP1
LoadBitmap(IDB_BITMAP1) -- 未定义标识符 IDB_BITMAP1: 错误原因:1:头文件没有加入 #include"resource.h" 2:没有导入该资源或者资源ID错误
2014-12-11 15:17:21 8719 1
原创 C++算法之 找出两个链表的公共节点
题目:输入两个链表,找出它们第一个公共节点。链表节点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;} 方法1:在第一个链表上顺序遍历每一个节点,没遍历一个节点,在第二个链表上顺序遍历每个节点。 O(n^2)方法2:找到两个链表的长度差,先遍历长链表到短链表的长度处
2014-12-11 11:13:38 3217
原创 扩展CList类加入排序功能
这里实现了两种排序:链表内部排序和链表外部排序:链表外部排序不会真实改变数据顺序: //在链表外部进行排序,不会直接影响到链表内的数据排序;实现方法是 申请一段对空间数组,用来存放指针,这些指针,指向//链表内的数据,排序的时候根据链表内数据的大小只要交换指针的位置就可以;比如链表内数据为 55 22 33 11 44;那么申请//一段堆空间数组 p[] 数组里面存放指针 p[
2014-12-10 13:59:44 2849 1
原创 在O(1)时间内删除链表节点
题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)的时间删除该节点。struct ListNode{ int m_nValue; ListNode* m_pNext;};void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted); 算法思路:一般我们是从头节点开始遍历,知道找到要
2014-12-10 09:51:59 2198
原创 C++算法之 两个队列实现一个栈
题目:用两个队列实现一个栈算法思路:现有两个队列q1与q2,入栈:如果q1与q2都为空,那么我们选择q1入栈也就是入队列,比如q1入栈 1 2 3 4 ;现在要出栈,后进先出那么4要出栈。但是q1是一个队列,先进先出,那么 1 2 3出队列 q2 1 2 3 入队列,q1中此时剩余4,把4出对列达到出栈的效果。 这个时候如果我们又加入一个元素5,那么我们应该把5放到q1还是q2,
2014-12-09 10:48:19 13759
原创 C++算法之 用两个栈实现一个队列
算法思路:一个栈用来入队列,一个栈用来出队列:现有两个栈s1 和s2;s1用来入栈,比如 队列进入 1 2 3 4 5 那么s1进栈 1 2 3 4 5 ,现在要出队列,意思就是要1先出来;那么我们把栈s1的数据取出来都压到栈s2当中,那么栈s2就是 5 4 3 2 1 ;s2再出栈,此时1出栈就模拟出出队列的效果; 编写代码:// QueueFrom2Stack.cp
2014-12-08 17:44:40 1185
原创 memcpy 与 memmove
memcpy:C和C++当中使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。 函数原型 void* memcpy(void* dest, const void* src, size_t count)函数返回指向dest的指针: mencpy与memmove的区别:根据源代码编写自己的Menc
2014-12-07 20:24:38 1385
原创 C++算法之 自己写循环队列
myQuene.h#pragma oncetypedef int TYPE;class myQueue{ TYPE* m_pData; int m_nCount; int m_nHead,m_nTail;public: myQueue(int nCount = 4) { m_nCount = nCount; m_pData = new
2014-12-06 17:26:28 1575
原创 C++算法之 写自己的栈stack 动态申请
myStack。h#pragma once//typedef int TYPE;templateclass myStack { TYPE* m_pData;//用new在堆上动态建立 int m_nTop; int m_nCount;public: bool isFull() { return m_nTop+1 >= m_nCount;
2014-12-06 17:20:44 2126
原创 C++算法之 自己写一个简单的栈Stack
// Stack.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;enum{COUNT = 8};typedef int TYPE;class CStack{ TYPE m_pData[COUNT]; int m_nTop; int m_nCount;
2014-12-06 15:51:01 5163
原创 C++算法之 合并两个有序链表
题目:合并两个已经排序好的链表方法1:两个链表 比如链表1: 1->3->5->7->9 链表2: 2->4->6->8->10 跟我们合并两个数组一样,链表1的头结点 和链表2的头节点比较,如果链表1头节点的值大于链表2头接点的值, 那么链表2的头结点为合并链表的头结点,那么链表1的头节点继续和链表2的第二个节点(剩余链表2的头结点) 作比
2014-12-05 11:39:51 25654
原创 effective C++ 读书笔记 条款36-37
条款36:绝不重新定义继承而来的non-virtual函数重要点:non-virtual函数都是静态绑定// 1241.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;class Base{public: void func() { cout<<
2014-12-04 15:51:02 940
原创 C++ 对象的静态类型与动态类型
在C++当中:因为出现了继承:继承导致对象的指针和引用具有两种不同的类型: 静态类型 和 动态类型 。 静态类型 :指针或者是引用声明时的类型。 动态类型 :由他实际指向的类型确定。 class Base{ }class Derived:public Base{}Base* base //base的静态类型是 Base* = new Derive
2014-12-04 14:19:10 2061
原创 C++算法之 合并两个数组
1:合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元素; 因为题目当中已经有一个数组可以容的下两个数组的元素,所有不需要请求新的数组,但是要把比较后的数组从后面往前面放;比如有数组A实际5个元素,数组B实际5个元素,那么我们 让a[4]与b[4]比较,把大的那一个放到a[9];比如a[4]>b[4];那么把a[4]放到a[9];再让a[3]与b[4
2014-12-04 10:10:27 32706 2
原创 自己写的CArray类
myArray.h:#pragma oncetemplateclass myArray{public: myArray(void); ~myArray(void);private: int m_nSize;//数据长度(也就是实际占用数组的内容的长度) int m_nCount;//资源数量(也就是数组的长度) TYPE* m_pDa
2014-12-03 17:33:57 723
原创 内存对齐
// 111.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include using namespace std;/* 编译器内存字节对齐的原则1. 数据类型的自身对齐值 数据类型的自身对齐值:其在内存中所占的字节数,如在3
2014-12-02 09:13:27 836
原创 effective C++ 读书笔记 条款12与条款13
条款12:确定你的public继承塑膜出is-a关系:这个条款主要将了一些特殊情况:比如企鹅是鸟,企鹅可以继承于鸟,但是鸟会飞,企鹅却不能飞;还有让正方形继承矩形可能也会造成这种尴尬!这个问题以前想过,但是不知道怎么解决,如果现实生活当中确实要这么使用:比如 猫 狗 鱼 猪等等许多动物继承Animal类,但是猫狗等不会游泳,假如这里是有很多动物,不能采用鱼里面专门加一个方法! 这个
2014-12-01 19:28:46 807
原创 自己写的String类
1:MyString.h#pragma onceclass myCString{public: int GetLength()const {return m_nLength;} myCString(void);//无参构造函数 myCString(const char* p);//根据字符串常量初始化 myCString(const myCString& rhs
2014-12-01 08:49:38 2148
原创 char* A ;char*B strcpy(A,B)出错
今天突然用到strcpy()函数于是char* A = "ABCDEFG";char* B = "GGGG";strcpy(A,B);编译通过,但是运行竟然直接结束了,报错; 为什么呢?因为char * A = “ABCDEFG”;"ABCDEFG"这是个const性质的,那么它存在于静态存储区,A指针指向静态存储区,但是不能改变它的值所以不能使用strcp
2014-11-30 16:21:00 4259
原创 VS2012解决不能使用 strcpy问题
在VS2012当中昨天发现不可以使用strcpy,原因是VS2012默认是unicode字符:要想使用strcpy可以按照下面的进行设置:
2014-11-28 08:47:13 6479
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人