- 博客(89)
- 资源 (3)
- 收藏
- 关注
原创 vector 使用at 和 []访问元素
1 使用at,如果不存在,则会抛出C++异常,可以使用异常机制捕获vector vecvec.push_back(1);try{ int i = vec.at(2);}catch(...){ cout } 2 使用【】直接抛错(vc编译器)
2009-08-24 10:15:00 3604
转载 STL中用erase()方法遍历删除元素
http://www.cppblog.com/Herbert/archive/2009/01/08/70479.html STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题。 在使用 list、set 或 map
2009-08-23 10:10:00 5783
转载 STL:循环删除容器中元素的方法和陷阱
算法大师Donald Knuth:不成熟的优化是一切恶果的根源(Permature optimization is the root of all evil )。 STL中的容器主要是两种:序列式容器和关联式容器。下面讲到的都是我在开发中曾经遇到过的一些问题,有些例子我做了修改,我想初学STL的人基本都会遇到这些问题。序列式容器:vector list string等等关联式容
2009-08-23 09:25:00 1013
转载 不同种类的整型比较,到底发生了什么?
看这么两行代码:int i = -1;cout 在VC6.0下,永远输出0。而下面这两行代码也永远输出0int i = 255;cout 而实际上,以上两个代码中,char(i)和unsigned char(i)具有的内存布局都是完全相同的。由于整型之间的类型转换遵循这样的原则:当目标类型比原类型短的时候,直接截断原类型。而当目标类型较长,则无符号类型会直接在高位补0,有符号类型在高位补符号位。
2009-08-15 13:55:00 993
转载 原码、反码和补码
在计算机内,定点数有3种表示法:原码、反码和补码所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。 反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。1、原码、反码和补码的表示方法(1) 原码:在数值前
2009-08-15 13:53:00 1277
原创 stl对象的初始化方法
stl对象有几种初始化方法:1 定义一个空的对象,如:vector vec;2 指定对象的大小,如:vector vec(10);3 指定初值,如:vector vec(10,1);//含有是个元素,每个值为14 以一个数组初始化,如:void Print(int PriVale){ cout }int main(arra
2008-12-04 10:24:00 3527
原创 C++中的##使用
##用于连接两个字符串,如:#define DEF(t) "str"##t int main(array ^args){ char ch[] = DEF("123"); cout getchar(); return 0;} 返回:str123 但,下面会提示编译错误:#define DEF(t)
2008-11-27 14:41:00 749
原创 单字节/宽字节下的strlen,sizeof,lstrlen
宽字节(unicode)下,一个字符占两个字节,所以: char ch1[] = "123"; TCHAR ch2[8] = TEXT("123"); cout sizeof(ch1) cout cout sizeof(ch2) cout 输出:4 3 16 3当然,最后那个字符串结束标记‘/0’
2008-11-27 14:26:00 3524
原创 Switch接受的类型
在C++中,Switch只接受整数类型,像char,int,short,long等,但string,float,double等就不支持,否则编译会出错: string d = "1"; switch (d) { case "1": cout "sd1" break; case "2":
2008-11-27 14:22:00 1140
原创 关闭编译时的警告
编译程序时会出现各种警告,软件发布时须关闭1 C++从大范围的书转为小范围的数时就会有警告信息,如: int i = 10; double d = 10.2; i = d + i; cout 改为下面就好了: int i = 10; double d = 10.2; i = (int)d + i; cout
2008-11-27 14:13:00 897
原创 windows实现多线程的原子访问
一 较老的实现函数LONG InterlockedIncrement(PLONG plAddend);LONG InterlockedDecrement(PLONG plAddend);这两个函数只能对指定的数实现加1或减1,现在他们已经有其他函数代替了,先看他们使用的一个例子: // 11.cpp : main project file. #include "st
2008-11-25 09:46:00 1439
转载 大小端模式
所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; r( ~dLm, 所谓的小端模式,是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低
2008-11-24 15:58:00 943
原创 CreateBitmaplndirect
函数功能:该函数可以创建一个具有特定宽度、高度和颜色格式的位图。 函数原型:HBITMAP CreateBitmaplndirect(CONST BITMAP *lpbm); 参数: ipbm:指向BITMAP结构的指针。该结构包含有关位图的信息。如果应用程序将其成员bmWidth或bmHeight设为0,那么CreateBitmaplndirect将返加一个只有1个像
2008-11-19 13:05:00 810
原创 重载new和delete运算符
在C++中可以重载new和delete运算符,重载new时注意参数须设置为size_t,当然UINT也可以,其他的如WORD,DWORD都不行;重载delete是参数应设为void *。下面是一个例子,还模拟了构造函数与new的执行顺序:// 重载newdelete.cpp : main project file. #include "stdafx.h" #include
2008-11-19 10:40:00 2907
原创 CreateBitmap
函数功能:该函数创建一个带有特定宽度、高度和颜色格式的位图。 函数原型:HBITMAP CreateBitmap(int nWidth,int nHeight, UINT cPlanes, UINT cBitsPeral,CONST VOID *lpvBits); 参数: nWiath:指定位图宽度、单位为像素。 NHeight:指定位图高度、单位为像素。
2008-11-18 18:03:00 7948
原创 半透明AlphaBlend
1 AlphaBlend 函数功能:该函数用来显示透明或半透明像素的位图。 函数原型:AlphaBlend(HDC hdcDest,int nXOriginDest,int nYOriginDest,int nWidthDest,int hHeightDest,HDC hdcSrc,int nXOriginSrc,int nYOriginSrc,int nWidthSrc,int
2008-11-18 11:31:00 9565 1
原创 AdjustWindowRect 与 SetWindowPos
这两个函数经常一起使用,所以放到一起讲:1 AdjustWindowRect 函数功能:该函数依据所需客户矩形的大小,计算需要的窗口矩形的大小。计算出的窗口矩形随后可以传递给CreateWindow函数,用于创建一个客户区所需大小的窗口。 函数原型:BOOL AdjustWindowRect(LPRECT lpRect ,DWORD dwStyle,BOOL bMENU);
2008-11-18 09:11:00 4647
原创 线程安全的对象操作
CRITICAL_SECTION cs;//全局临界区 class Lock//加-解锁 {public: Lock() { EnterCriticalSection(&cs); } ~Lock() { LeaveCriticalSection(&cs); }};
2008-11-17 15:26:00 819
原创 结构体
1 命名使用如下形式:typedef struct Render_S { int i; int j;}Render, *RenderPtr; 注意加typedef,否则Render r ;的话会出错,但Render_S r;可以,还要注意变量的定义要分行。//待续
2008-11-17 09:46:00 603
转载 GetSystemMetrics
下面是GetSystemMetrics函数参数nIndex的定义: SM_ARRANGE Flags specifying how the system arranged minimized windows. For more information about minimized windows, see the following Remarks section. SM_
2008-11-10 10:43:00 663
原创 COLORREF结构
1 定义typedef DWORD COLORREF;即为一个32为长整数2 初始化COLORREF col = RGB(100,200,10);其中用到了RGB,看看他是什么:#define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))原来也是一个COLORREF ,不过是把参数转换
2008-11-10 09:51:00 2219
原创 DX中灯光和材质续
假如设置这样的顶点格式:#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ)//灵活顶点格式 struct CUSTOMVERTEX { D3DXVECTOR3 position;}; 他告诉我们,顶点是未进行坐标转换和光照处理的,须我没手动处理,如果我们未处理会是怎样呢? 1 什么都不做:/*****
2008-11-04 16:40:00 875
原创 DX灯光与材质
因为灯光与材质经常在一起使用,所以一起讲。一 基本概念在前面的例程中,通过对顶点颜色进行插值来获取实体表面的颜色,这种简化的计算模型无法如实地反映真实世界。在自然界中,我们所看到的一切都是由光线产生的:光由光源出发,沿直线传播;当光线遇到物体时,一部分被吸收,剩余的被反射,该过程反复进行,直至光线能量耗尽,或者被人眼接收从而产生视觉。在Direct3D中,用灯光和材质来模拟这个过程。灯光
2008-11-04 15:25:00 2551 1
原创 DX中的颜色表示
DX中有很多种方式可以表示颜色:1 DWORD:定义:typedef unsigned long DWORD;即为一个无符号32位(32机器)长整数,有四个字节,我们从左到右叫他1,2,3,4字节,每一个字节的范围是0~255。第一个字节表示alpha值,即透明度。如果是255,表示不透明,0表示完全透明(看不到),其他分别是R,G,B值。获取:可通过下列方法获得
2008-11-04 14:11:00 1386
原创 索引缓冲区
在Direct3D中,实体模型中的一个点可能被多个三角形面所共用,如果每个三角形都构造三个顶点,对比较浪费资源的,为了节省资源,引入了索引缓冲区:把顶点的具体数据和代表图元格式的顶点顺序分开存储,顶点数据仍然放到顶点缓存区中,索引缓存区则按照图元格式,顺序存放顶点的索引。下面是一个简单的使用例子,画出两个三角形:/*********************************
2008-11-04 11:36:00 3357
原创 关于DX中三角形的构造顺序
今天写了一个简单的程序,显示一个三角形,结果就是看不到在屏幕上,我构造的三角形如下: vertices[0].position = D3DXVECTOR3(150.0f, 50.0f, 1.0f);//三个点 vertices[0].rhw = 1.0f; vertices[0].color = 0xffff0000; vert
2008-11-04 11:22:00 1258
原创 DX9三种缓冲区
DX9中有三种缓冲区,分别是颜色缓冲区,深度缓冲区,模板缓冲区。 1 三种缓冲区简介颜色缓冲区:设置后备缓冲区的颜色,即背景的颜色。深度缓冲区:即所说的Z缓冲,每一个待绘制的三角形都有一个Z值(0-1),DX会比较当前位置的两个图元的Z值,决定绘制那个图元,即是否用当前图元的颜色代替已有位置图元的颜色。模板缓冲区:是一个记录每个像素信息的附加的缓冲区,很象一个 z 缓冲区。
2008-11-04 09:32:00 2048
转载 VS2005快捷键
VS.net 2005快捷键一览表 全局”快捷键 下列快捷组合键可用于集成开发环境 (IDE) 中的不同位置。 命令名 快捷键 说明 编辑.复制 CTRL + C CTRL + INSERT 将当前选定的项复制到系统剪贴板。 编辑.剪切 CTRL + X SHIFT + DELETE 将当前选定的项移除到系统剪贴板。 编辑.循环应用剪贴板中的复制项 CTRL + SHIFT + INS CTRL
2008-10-30 11:28:00 1435 1
原创 全局变量先于main/winmain执行
C++规定,全局对象的构建比程序的进入点(main/winmain)更早。class A{public: A() { cout"A" }};A a;int main(array ^args){ cout"main" getchar(); return 0;}结果为
2008-10-30 10:16:00 991 1
原创 MFC的入口
很多人找不到MFC中的WinMain函数在哪,其实是在crtexe.c文件中,有一个WinMain函数,他就是起点。然后调用appmodul.cpp的_tWinMain,这个函数只有一条语句:return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);程序进入winmain.cpp中的AfxWinMain(),这个函数再调
2008-10-30 09:20:00 1231 3
原创 SetCapture
一般,只有鼠标在CWnd的客户区内,你才能接受到鼠标消息。调用SetCapture后,即使鼠标移动出客户区,你也可以接受到鼠标消息。不过系统中只能有一个程序调用SetCapture,所以你需要在不使用时调用ReleaseCapture释放。而GetCapture可以知道当前哪个窗口调用了SetCapture。BLOKOUT2.C /*---------
2008-10-29 13:41:00 4774
转载 GetSafeHwnd
当我们想得到一个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全的方法是使用GetSafeHwnd()函数,通过下面的例子来看其理由: CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器 HWND hwnd = pwnd->m_hwnd; //得到它的HWND 这样的代码当开始得到的pwnd为空的时
2008-10-29 11:30:00 981 1
转载 汉字编码
一、汉字编码的种类 汉字编码中现在主要用到的有三类,包括GBK,GB2312和Big5。 1、GB2312又称国标码,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。它是一个简化字的编码规范,当然也包括其他的符号、字母、日文假名等,共7445个图形字符,其中汉字占6763个。我们平时说6768个汉字,实际上里边有5个编码为空白,所以总共有6763个汉字
2008-10-29 10:47:00 74359 3
转载 OutputDebugString
我们知道,Window系统中有一种称为Debuger的工具,可以捕获应用程序输出的调试信息,这是由OutputDebugString函数实现的。为什么要有这样一种调试机制呢?有果必有因:当一个大型程序中存在着一个非常隐蔽的错误(所谓隐蔽,指的是我从运行过程中发现程序不正常,但是即使检查源代码,也很难发现何处存在错误),于是乎,我们在运行过程中添加一些输出语句,把中间结果或者程序状态输出出来,根据
2008-10-29 10:18:00 1224
原创 精确获取时间(QueryPerformanceCounter)
LARGE_INTEGER tima,timb; QueryPerformanceCounter(&tima); 在 Windows Server 2003 和 WindowsXP 中使用 QueryPerformanceCounter 函数的程序可能执行不当QueryPerformanceCounter 來精確計算執行時間QueryPerformanceCounter 來精確計算執行時間
2008-10-29 09:34:00 29020 1
转载 堆与栈
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
2008-10-28 18:04:00 909
原创 把一张纹理贴到一个正方形上
/******************************************************FileName: Demo.cppAuthor: lsm Version: Date: 08/10/28Description: 把一张纹理贴到一个正方形上.History: ********************
2008-10-28 17:48:00 1505 6
转载 顶点格式
下面我们来讨论有关声明顶点和顶点格式的有关内容: 注:在DirectX 6.0之前,程序使用三种顶点类型——D3DVERTEX、D3DLVERTEX和D3DTLVERTEX——中的一种时,需要考虑正在使用几何管道中的哪一部分。随着DirectX 6.0中更加灵活的顶点格式的出现,使得我们有了比以前更多的声明方式,但是仍然要使用预先定义的结构来描述不进行变换和灯光处理
2008-10-28 15:05:00 1890
原创 D3DCULL_MODE
D3DCULL_MODE是背面隐藏消除的意思. 出于性能或者其它方面考虑,D3D默认在绘制三角形的时候,只绘制一面,D3DRS_CULLMODE可以设置绘制正面还是反面,或者两面都绘制,(可以这样定义:在观察空间观察某个三角形时,如果三角形的3个顶点p1、p2、p3呈逆(顺)时针排列时,显示这个三角形)。 SetRenderState( D3DRS_CULLMODE,
2008-10-28 14:31:00 1377
转载 D3DFVF_XYZ和D3DFVF_XYZRHW的区别
D3DFVF_XYZ和D3DFVF_XYZRHW有什么区别?以前好像没有仔细思考过。 今天,做了个实验得知,在顶点结构体中没有RHW时,Direct3D将执行视、投影、世界等变换以及进行光线计算,之后你才能在窗口中得到你所绘制的物体。当顶点结构体中有RHW时,就像上面那段英文所述,告知Direct3D使用的顶点已经在屏幕坐标系中了,不再执行视图、投影、世界等变换和光线计算,因为D3DF
2008-10-28 14:03:00 1844 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人