C++
饭fan有引力
低调低调~
展开
-
用回溯法求解0—1背包问题,并输出问题的最优解
问题:给定n种物品和一背包。物品i的重量是Wi,其价值为Vi,背包的容量是c,问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大。0—1背包问题是一个子集选取问题,适合于用子集树表示0—1背包问题的解空间。在搜索解空间树是,只要其左儿子节点是一个可行结点,搜索就进入左子树,在右子树中有可能包含最优解是才进入右子树搜索。否则将右子树剪去。int c;//背包容量int n;原创 2011-12-12 09:21:48 · 8982 阅读 · 0 评论 -
c/c++ 结束进程的方法
1.使用ExitProcess()结束进程 进程只是提供了一段地址空间和内核对象,其运行时通过在其地址空间内的主线程来体现的。当主线程的进入点函数返回时,进程也就随之结束。这种进程的终止方式是进程的正常退出,进程中的所有线程资源都能够得到正确的清除。除了这种进程的正常原创 2011-08-10 20:31:54 · 26807 阅读 · 1 评论 -
C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
fstream提供了三个类,用来实现c++对文件的操作。(文件的创建、读、写)。ifstream -- 从已有的文件读ofstream -- 向文件写内容fstream - 打开文件供读写文件打开模式:ios::in 读ios:原创 2011-08-11 14:32:51 · 1468 阅读 · 0 评论 -
在C++中如何实现文件的读写?
一、ASCII 输出为了使用下面的方法, 你必须包含头文件(译者注:在标准C++中,已经使用取代,所有的C++标准头文件都是无后缀的。)。这是 的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, 已经被包含了, 所以你不必包含所有这两个文件, 如果你想显式包含他们,那转载 2011-08-10 22:30:28 · 5351 阅读 · 0 评论 -
c++文件操作
C++文件操作 例题讲解: C++文件流: fstream // 文件流 ifstream // 输入文件流 ofstream // 输出文件流 //创建一个文本文件并写入信息 //同向屏幕上输出信息一样将信息输出至文件转载 2011-08-10 15:43:18 · 950 阅读 · 0 评论 -
WinAPI: WinExec - 运行外部程序
//声明WinExec( lpCmdLine: LPCSTR; {文件名和参数; 如没指定路径会按以下顺序查找: 程序目录/当前目录/System32/Windows/PATH环境变量} uCmdShow: UINT {启动选项}): UINT;//返回值原创 2011-08-10 20:50:27 · 1233 阅读 · 1 评论 -
给VC/SDK中的应用程序加上皮肤(实例演示)
网上MFC加皮肤的资料蛮多的,SDK方面的相对较少,但是原理雷同,废话不多说了。简单说明一下过程1、复制 SkinH.dll、SkinH.lib、SkinH.h 以及皮肤文件MSN.she 至工程目录下; 这里为了方便我直接把皮肤文件放到了一个文件夹中,在包含头文件的时候注意相应的路径就OK。2、在工程中引入 .h 头文件及 Lib 静态库,大家在引用的时候要注意文件的路径;#include "SkinH.h"#pragma comment(lib,"SkinH.lib")3、在创建窗口之前加载皮转载 2011-02-16 21:05:00 · 1316 阅读 · 1 评论 -
移位运算
今天晚上,同学问我:vectorSize=(setSize+15)>>4;是什么意思?我一看蒙了,难道这个是运算符重载,一看前面,还真的有一段声明是输入运算符的重载。可是,这用运算符重载要怎么解释呢。。想了很久,最后灵光一闪,原来这个并不是什么运算符重载,而只是位运算符的移位运算,哈哈哈,想那么多。左移n位数(《),相当于乘以2的n次幂 右移n位数(》),相当于除以2的n次幂原创 2010-11-07 20:48:00 · 1270 阅读 · 0 评论 -
win32 API 图片、音乐的加入代码
加入音乐:静态库:#pragma comment(lib,"winmm.lib") //Windows multimedia library playsound("1.wav",NULL,SND_FILENAME | SND_ASYNC);取得窗口句柄hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;加入图片:但必须是位图,即BMP格式 static HBITMAP hBitmap1,hOldBitmap;//申请图片句柄原创 2010-12-21 20:05:00 · 1744 阅读 · 0 评论 -
C++传递二维数组
c++之所以强大,其中重要原因之一就是支持指针,然而这也是c++最令人头痛的问题之一,其中二维数组作为参数传递就是其中之一。一、关于一维数组C++中一维数组作为函数参数传递应用十分普遍,原理和操作都十分简单。数组名就代表了数组的首地址,下标就是偏移量。函数的形式参数声明为一级指针即可(Type *),而实参就是数组名。二、扩展到二维数组一维的情况解决了,接下来扩充到二维的情形。思路同前,采用二级指针引用二维数组(Type**)从而得到如下程序: #include "stdafx.h"#includeusi原创 2010-10-12 21:24:00 · 6920 阅读 · 0 评论 -
C++ 文件的复制、删除、重命名
一、文件的复制#include #include using namespace std;int CopyFile(char *SourceFile,char *NewFile){ifstream in;ofstream out;in.open(S原创 2011-08-11 16:37:15 · 42571 阅读 · 1 评论 -
以消息为基础,以事件驱动之(message based, event driven)
Windows 程序的进行系依靠外部发生的事件来驱动。换句话说,程序不断等待(利用一个while 回路),等待任何可能的输入,然后做判断,然后再做适当的处理。上述的「输入」是由操作系统捕捉到之后,以消息形式(一种数据结构)进入程序之中。操作系统如何捕捉外围设备(如键盘和鼠标)原创 2011-09-11 20:22:21 · 1429 阅读 · 0 评论 -
[C++]MySQL数据库操作实例
由于课程大实验需要使用c++操作MySQL数据库,经过一番研究终于成功实现VS2008中与MySQL的连接。环境设置:安装完MySQL之后,将安装目录中的MySQL5\lib\debug\目录下的libmysql.lib文件拷到VS2008安装目录中的VC\lib\下,然后在 项目-选项-c/c++-常规 中的附加包含目录以及 链接器-常规 中的附加库目录中加入“c:\MySQL\原创 2011-11-28 08:48:59 · 1305 阅读 · 0 评论 -
C++编写Windows服务程序
#include "windows.h"SERVICE_STATUS gSvcStatus; //服务状态SERVICE_STATUS_HANDLE gSvcStatusHandle; //服务状态句柄HANDLE转载 2011-08-27 08:44:02 · 14966 阅读 · 2 评论 -
VC画线
1、利用SDK全局函数实现画线功能利用Platfirn SDK函数实现画线功能的代码:void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) { // 首先获得窗口的设备描述表 HDC hdc; hdc =原创 2011-09-24 09:58:15 · 4899 阅读 · 2 评论 -
用 C 语言编写 Windows 服务程序的五个步骤
下载源代码原文出处:Five Steps to Writing Windows Services in C摘要 Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务。为了学习这种控制台应用程序的基础知识,C(不是C++)是最佳转载 2011-08-27 08:41:11 · 3136 阅读 · 0 评论 -
WaitForSingleObject的用法-(判断一个程序是否结束)
WaitForSingleObject 的应用 你还再为怎么判断一个程序是否结束而苦恼吗?或许你在想可以用一个循环每隔几秒来判断一次这个进程是否结束,但是这样会有问题,如果间隔时间太短就会很占CPU 资源,间隔时间太长又不能及时知道程序已经结束,或许有人马上就想到Wait转载 2011-08-17 10:16:08 · 15292 阅读 · 2 评论 -
MFC程序运行过程梳理
首先利用全局应用程序对象theApp启动应用程序。正是产生了这个全局对象,基类CWinApp中的this指针才能指向这个对象。如果没有这个全局对象,程序在编译时不会出错,但在运行时就会出错。调用全局应用程序对象的构造函数,从而就会先调用其基类CWinApp的构造函数。后者完成应用原创 2011-09-15 20:43:57 · 773 阅读 · 0 评论 -
VS2010--不能将参数 2 从“const char [12]”转换为“LPCWSTR”与指向的类型无关
PROCESSENTRY32 pe32;HANDLE hSnaphot;HANDLE hApp;DWORD dProcess = 0; hSnaphot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0原创 2011-08-18 15:35:02 · 3270 阅读 · 0 评论 -
一个具体而微的Win32程序
程序进入点WinMain窗口类之注册与窗口之诞生消息循环窗口的生命中枢:窗口函数消息映射的锥形对话框的运行模块定义文件(.DEF)资源描文件(.RC)原创 2011-09-11 20:56:49 · 653 阅读 · 0 评论 -
Windows 程序的生与死
对Windows 消息种类以及发生时机的透彻了解,正是程序设计的关键。现在我以窗口的诞生和死亡,说明消息的发生与传递,以及应用程序的兴起与结束,请看图1-5 及图1-6。为什么结束一个程序复杂如斯?因为操作系统与应用程序职司不同,二者是互相合作的关系,所以原创 2011-09-11 20:35:22 · 1240 阅读 · 0 评论 -
创建二维数组的几个方法
常规的创建方法:type T [n][n]式就不说了。(int array[n][n];)首先介绍两个动态的创建方法,然后介绍一下C++标准的中使用STL的容器vector创建二维数组的方法。1.定义:const int ROW = 3;int size = 5;int (*pi)[ROW] ; //第二维必须为常数pi = new int[size][ROW]; // 即 int (*pi)[ROW] = new int[size][ROW];操作方法:int k = 0;cou原创 2010-10-12 20:49:00 · 2409 阅读 · 0 评论 -
异常处理
try 块和异常处理在设计各种软件系统的过程中,处理程序中的错误和其他反常行为是困难的部分之一。像通信交换机和路由器这类长期运行的交互式系统必须将 90% 的程序代码用于实现错误检测和错误处理。随着基于 Web 的应用程序在运行时不确定性的增多,越来越多的程序员更加注重错误的处理。异常就是运行时出现的不正常,例如运行时耗尽了内存或遇到意外的非法输入。异常存在于程序的正常功能之外,并要求程序立即处理。在设计良好的系统中,异常是程序错误处理的一部分。当程序代码检查到无法处理的问题时,异常处理就特别有用。在这些情原创 2010-08-20 10:21:00 · 818 阅读 · 0 评论 -
避免多重包含
在编写头文件之前,我们需要引入一些额外的预处理器设施。预处理器允许我们自定义变量。预处理器变量的名字在程序中必须是唯一的。任何与预处理器变量相匹配的名字的使用都关联到该预处理器变量。为了避免名字冲突,预处理器变量经常用全大写字母表示。预处理器变量有两种状态:已定义或未定义。定义预处理器变量和检测其状态所用的预处理器指示不同。#define 指示接受一个名字并定义该名字为预处理器变量。#ifndef 指示检测指定的预处理器变量是否未定义。如果预处理器变量未定义,那么跟在其后的所有指示都被处理,直到出现 #en原创 2010-07-19 15:25:00 · 911 阅读 · 0 评论 -
Windows链接时期所需要的函数库
Windows支持动态链接。换句话说,应用程序所调用的Windows API函数是在“执行时期”才链接上的。并不是拓展名为.dll才是动态链接库。.exe,.dll,.fon,.mod,.drv,.ocx都是所谓的动态链接函数库。Windows程序调用的函数可分为C Runtimes以及Windows API两大部分。早期的C Runtimes并不支持动态链接库,但Visual C++4.0之后已支持,并且在32位操作系统中已不再有small/large等内存模式之分。另一组函数,Windows API,由原创 2010-07-14 08:05:00 · 1357 阅读 · 0 评论 -
冒泡排序同时对下标进行排序
#include #include #include using namespace std;#define size 10struct temp{ int number; int index; };int main() { int s[size]; //通过随机数得到数组的初始值 srand(time(NULL)); struct temp tmp[size]; for (int i=0;i原创 2010-07-15 19:45:00 · 1980 阅读 · 0 评论 -
win32修改.exe图标
我知道的有两种方法:1.在.exe上单击右键属性,改图标,但这不是编程人员想要用的.2.对于Win32 Console Application应程序,在给窗口类成员赋值时改变.如:wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); //这里用系统中的,都知道.如果我们要用用自己的图标,可修为如下:wndclass.hIcon = (HICON)LoadImage(NULL,"DZYX.ico",IMAGE_ICON,0,0,LR_LOADFROMFILE);原创 2010-07-15 10:24:00 · 5440 阅读 · 0 评论 -
没有找到mfc90ud.dll,因此这个应用程序未能启动.重新安装应用程序可能会修复此问题
解决方案:项目属性->配置属性->链接器->调试->生成映射文件 选择 Yes (/MAP)原创 2010-07-14 23:15:00 · 1762 阅读 · 0 评论 -
命名空间的 using 声明(摘自C++Primer第四版3.1)
在本章之前看到的程序,都是通过直接说明名字来自 std 命名空间,来引用标准库中的名字。例如,需要从标准输入读取数据时,就用 std::cin。这些名字都用了:: 操作符,该操作符是作用域操作符(第 1.2.2 节)。它的含义是右操作数的名字可以在左操作数的作用域中找到。因此,std::cin 的意思是说所需要名字 cin 是在命名空间 std 中定义的。显然,通过这种符号引用标准库名字的方式是非常麻烦的。幸运的是,C++ 提供了更简洁的方式来使用命名空间成员。本节将介绍一种最安全的机制:using 声明。原创 2010-07-11 21:45:00 · 907 阅读 · 0 评论 -
VS2008调试快捷键
F6: 生成解决方案 Ctrl+F6: 生成当前项目 F7: 查看代码 Shift+F7: 查看窗体设计器 F5: 启动调试 Ctrl+F5: 开始执行(不调试) Shift+F5: 停止调试 Ctrl+Shift+F5: 重启调试 F9: 切换断点 Ctrl+F9: 启用/停止断点 Ctrl+Shift+F9: 删除全部断点 F10: 逐过程 Ctrl+F10: 运行到光标处 F11: 逐语句原创 2010-07-11 01:12:00 · 5643 阅读 · 0 评论 -
C++命名空间namespace
在C++中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域。1. 作用域与命名空间与命名空间相关的概念有:声明域(declaration region)—— 声明标识符的区域。如在函数外面声明的全局变量,它的声明域为声明所在的文件。在函数内声明的局部变量,它的声明域为声明所在的代原创 2010-07-11 22:13:00 · 900 阅读 · 0 评论 -
ASCII码表
ASCII(American Standard Code for Information Interchange)定义从 0 到 127 的共128个数字所代表的英文字母或一样的结果与意义。由于使用7个位(bit)就可以表示从0到127的数字,大部分的电脑都使用8个位来存取字元集(character set),所以从128到255之间的数字可以用来代表另一组128个符号,称为extended ASCII。目前计算机中用得最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(America原创 2010-07-07 11:36:00 · 693 阅读 · 0 评论 -
Vector容器
标准库 vector 类型vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和 string 对象一样,标准库将负责管理与存储元素相关的内存。我们把 vector称为容器,是因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。我们将在第九章更详细地介绍容器。使用 vector 之前,必须包含相应的头文件。本书给出的例子,都是假设已作了相应的 using 声明:#include using std::vector;vector 是一个类模板(class template)原创 2010-07-19 19:11:00 · 2498 阅读 · 0 评论 -
整型的赋值
对象的类型决定对象的取值。这会引起一个疑问:当我们试着把一个超出其取值范围的值赋给一个指定类型的对象时,结果会怎样呢?答案取决于这种类型是 signed 还是 unsigned 的。对于 unsigned 类型来说,编译器必须调整越界值使其满足要求。编译器会将该值对 unsigned 类型的可能取值数目求模,然后取所得值。比如 8 位的unsigned char,其取值范围从 0 到 255(包括 255)。如果赋给超出这个范围的值,那么编译器将会取该值对 256 求模后的值。例如,如果试图将 336 存储原创 2010-07-18 22:35:00 · 1831 阅读 · 1 评论 -
C++代码编辑器使用技巧
1.在代码编辑器中实现录制功能按开始录制按结束录制按粘贴 2.检测代码中括号是否匹配将光标移动到需要检测的括号前面,按或,如果前面有匹配的括号,光标会跳到匹配的括号处,否则光标不移动,且机箱发出警告声。3.对齐零乱的代码4.显示函数参数5.完全取词功能不可用通常在输入“.”后会显示对象的成员变量和方法,但有时该功能不可用。如果出现该种情况,可以关闭当前的工程,然后删除拓展名为“.ncb”的文件,然后重新打开工程。6.自定义关键字“/Common/MSDev98/Bin”有一个USERTYPE.DAT文件,用原创 2010-06-15 17:44:00 · 1521 阅读 · 0 评论 -
C++ static用法
static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用(C,C++中具体细微操作不尽相同, 本文以C++为准).(1)局部静态变量(2)外部静态变量/函数(3)静态数据成员/成员函数下面就这三种使用方式及注意事项分别说明一、局部静态变量在C/C++中, 局部变量按照存储形式可分为三种auto, static, register与auto类型(普通)局部变量相比, static局部变量有三点不同1. 存储空间分配不同auto类型分配在栈原创 2010-06-14 20:05:00 · 1335 阅读 · 0 评论 -
c++ const 用法
一、对于基本声明1.const int r=100; //标准const变量声明加初始化,因为默认内部连接所以必须被初始化,其作用域为此文件,编译器经过类型检查后直接用100在编译时替换。2.extend const int r=100; //将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行初始化,仅仅作为声明,编译器认为在程序其他地方进行了定义。3.const int r[ ]={1,2,3,4};struct S {int a,b;};const S s[ ]={(1,2),原创 2010-06-14 20:02:00 · 989 阅读 · 1 评论 -
error LNK2019
xxxProject error LNK2019: unresolved external symbol "wchar_t * __stdcall _com_util::ConvertStringToBSTR(char const *)" (?ConvertStringToBSTR@_com_util@@YGPA_WPBD@Z) referenced in function "public: __thiscall _variant_t::_variant_t(char const *)" (??0_vari原创 2010-08-05 21:24:00 · 3491 阅读 · 1 评论 -
error LNK2005: _DllMain@12 already defined in MSVC
编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误。弄清楚它形成的原因,就可以轻松解决它了。 造成LNK2005错误主要有以下几种情况: 1.重复定义全局变量。可能存在两种情况: A、对于一些初学编程的程序员,有时候会以为需要使用全局变量的地方就可以使用定义申明一下。其实这是错误的,全局变量是针对整个工程的。正确的应该是在一个CPP文件中定义如下:int g_Test;那么在使用的CPP文件中就应该使用:extern int g原创 2010-08-04 21:45:00 · 952 阅读 · 0 评论 -
编译时没有任何错误,但是运行时就是提示“应用程序正常初始化失败”!!
1. VC2003、VC2005、VC2008及其后续版本,对底层最基本的CRT、MFC、ATL库都进行了重构,为了避免不同版本的库引起冲突,重构后的库文件一般放在 C://windows/WinSxS 文件夹中,并用特定的文件夹/文件名称进行标识;2. 与VC6不同, VC2003、VC2005、VC2008及其后续版本,引入了manifest清单的概念,即应用程序编译后会同时生成对应的.manifest文件,并将该.manifest文件作为资源编译到dll或者exe中去。.manifest文件实际上是一原创 2010-08-04 15:39:00 · 2873 阅读 · 0 评论