自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

David的专栏

成功源于勤奋

  • 博客(30)
  • 资源 (1)
  • 收藏
  • 关注

原创 STL list实现(二)

 STL list实现(2) 在之前的一篇文章里,讲述了list的声明和部分函数的实现。(请参考stl list实现一)在这一篇文章里 ,将向大家介绍一些常用函数的实现。 一.  List的删除:list支持删除所有指定的值。 记住,list的remove的参数为VALUE,不支持参数为iterator.Erase的参数为迭代器。为什么remove()和eras

2009-09-29 15:43:00 2586

转载 VS2010的Lambda表达式

  前言:与boost支持lambda不同的是,VS2010提供对lambda的内建支持。  Lambdas在 C++ 0x 中,“lambda表达式”隐式定义并构建不具名函数对象,这些对象就像手写函数对象一样。下面是 lambda “Hello,World”入门级的示例: C:/Temp>type meow.cpp#include #include

2009-09-27 16:18:00 6884

原创 c++文件流基本用法(fstream, ifstream, ostream)

前言:c++的文件流处理其实很简单,前提是你能够理解它。文件流本质是利用了一个buffer中间层。有点类似标准输出和标准输入一样。c++ IO的设计保证IO效率,同时又兼顾封装性和易用性。本文将会讲述c++文件流的用法。有错误和疏漏的地方,欢迎批评指证。需要包含的头文件:  名字空间: std也可以试用fstream提供了三个类,用来实现c++对文件的操作。(文件的创建,读写)

2009-09-27 10:59:00 182054 11

原创 关于c++IO的效率

自己写了一段测试程序,比较c++ IO读和c语言的IO读的效率:    long tickcount = GetTickCount();//取得系统启动后的时间(miliseconds)    int k = 0; cout for (int i = 0; i { FILE* f = fopen("c://temp//test.txt", "rb");

2009-09-25 12:08:00 2762

原创 VS2010试用体会

装了没几天,感觉确实很赞。就是内存消耗太大了。看来要去加内存了。发几张图,和大家分享一下。1. 启动后的欢迎界面,也是初始界面:    2. 新建一个工程时的界面。全新的look and feel      3. 对于单个源代码文件,可以拖出来,使其浮动起来。还可以最大化。      打开一个测试工程。

2009-09-24 22:25:00 1206

原创 VC++利用Automation操作word, excel

 关于VC操作word和EXCEL的,其中有网上抄的资料,也有自己的理解和体会。1. 一般来说,VC操作word和EXCEL比较直接的方式是利用automation. 翻译成中文就是自动化。你要做的第一件事情就是为你的工程添加操作word和EXCEL需要的头文件。方法如下:    对于VC6.0来说,打开class wizard, 然后选中automation,弹出以下界面:  

2009-09-24 18:11:00 5699 2

转载 多线程基础

当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力。用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义。现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的。因此掌握多线程多任务设计方法对每个程序员都是

2009-09-23 12:07:00 1036 1

转载 回调函数

  我们经常使用回调函数可以使有些应用(如定时器事件回调处理、用回调函数记录某操作进度等)变得非常方便和符合逻辑,使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数。    调用机制从汇编时代起已经大量使用:准备一段现成的代码,调用者可以随时跳转至此段代码的起始地址(汇编指令为call),执行完后再返回跳转

2009-09-23 12:04:00 1091

翻译 effective STL 关于STL容器的线程安全特性

 标准C++的世界是相当保守和精简的。在这个纯洁的世界,所有可执行文件都是静态链接的。不存在内存映射文件和共享内存。没有窗口系统,没有网络,没有数据库,没有进程。在这种情况下,当发现标准没有提到任何关于线程的东西时你不该感到惊讶。你对STL的线程安全有的第一个想法应该是这取决于STL的实现。 当然,多线程程序是很普遍的,所以大部分STL厂商努力使他们的实现在线程环境中可以正常工作。但是

2009-09-22 23:14:00 4012

原创 Unicode入门

 如果你编写的程序是针对非英语国家的用户,如中国、日本、东欧和中东地区,那么你一定要熟悉 UNICODE 字符集。尤其是用 Visual C++/MFC 编写针对上述国家和地区的用户的程序时,如果你想让自己的应用程序得到更广泛的用户,那么必须考虑代码 UNICODE 的兼容性,也就是说它既在 ASCII 模式下运行 ,也能在UNICODE 模式下运行。本文将介绍 UNICODE 的一些基本

2009-09-22 15:27:00 697

翻译 effective STL STL的内存适配器

 分配器是怪异的。它们最初是为抽象内存模型而开发的,允许库开发者忽略在某些16位操作系统上near和far指针的区别(即,DOS和它的有害产物),但努力失败了。分配器也被设计成促进全功能内存管理器的发展,但事实表明那种方法在STL的一些部分会导致效率损失。为了避免效率冲击,C++标准委员会向标准中添加了词语,把分配器弱化为对象,同时也表达了他们不会让操作损失能力的希望。还有更多。正如ope

2009-09-21 23:17:00 793

转载 从MFC消息映射宏分析MFC消息映射的实现

 在MFC中,我们可以找到如下三个宏DECLARE_MASSAGE_MAP()BEGINE_MASSAGE_MAP(CLASS, BASSCLASS)END_MASSAGE_MAP() 下面来分析这三个宏1  DECLARE_MESSAGE_MAP() 作用:为一个消息响应类声明必需的成员变量和成员函数。#define DECLARE_MESSAGE_MAP()

2009-09-21 18:47:00 975

转载 effective c++ 关于c++对象的初始化。

 C++ 看上去在对象的初始化方面变化无常。例如,如果你这样做,int x;在某些情形下,x 会被初始化(0),但是在其它情形下,也可能没有。如果你这样做,class Point {  int x, y;};...Point p;p 的数据成员有时会被初始化(0),但有时没有。如果你从一个不存在未初始化对象的语言来到 C++,请注意这个问题,因为它非常重要。读取一个未初始化的值会引起未定义行为

2009-09-21 10:20:00 1649

翻译 Effective STL - 不要把auto_ptr放在容器里

  坦白地说,本条款不需要出现在《Effective STL》里。auto_ptr的容器(COAPs)是禁止的。试图使用它们的代码都不能编译。C++ 标准委员会花费了无数努力来安排这种情况[1]。我本来不需要说有关COAPs的任何东西,因为你的编译器对这样的容器应该有很多抱怨,而且所有那些都是不能编译的。 唉,很多程序员使用STL平台不会拒绝COAPs。更糟的是,很多程序员妄想地把

2009-09-19 23:41:00 2148

翻译 effective STL 当容器里储存指针时,记得要手动释放

 条款7:当使用new得指针的容器时,记得在销毁容器前delete那些指针STL中的容器非常优秀。它们提供了前向和逆向遍历的迭代器(通过begin、end、rbegin等);它们能告诉你所容纳的对象类型(通过value_type的typedef);在插入和删除中,它们负责任何需要的内存管理;它们报告容纳了多少对象和最多可能容纳的数量(分别通过size和max_size);而且当然当容器自己

2009-09-19 23:25:00 3125

翻译 Effective STL - 警惕c++让人懊恼的解析

 假设你有一个int的文件,你想要把那些int拷贝到一个list中。这看起来像是一个合理的方式:ifstream dataFile("ints.dat");list data(istream_iterator(dataFile), // 警告!这完成的并不 istream_iterator()); // 是像你想象的那样这里的想法是传一对istream_iterator

2009-09-19 23:11:00 1065

转载 BSTR、LPSTR和LPWSTR  

 一、   BSTR、LPSTR和LPWSTR   在Visual C++.NET的所有编程方式中,我们常常要用到这样的一些基本字符串类型,如BSTR、LPSTR和LPWSTR等。之所以出现类似上述的这些数据类型,是因为不同编程语言之间的数据交换以及对ANSI、Unicode和多字节字符集(MBCS)的支持。那么什么是BSTR、LPSTR以及LPWSTR呢?  BSTR(Basic S

2009-09-16 17:09:00 4640

原创 little endian和big endian

little endian和big endian其实描述的是硬件级别的规范,对于操作系统而言,little endian和big endian其实是透明的。 目前网上很多的文章讲的都很有问题,下面是我截的一张图,讲的比较规范和透彻的:   用一句话来总结,little endian是  数据的低位字节放在地址的低位。高位字节放在地址的高位big endian是数据的

2009-09-16 00:47:00 853

转载 c++重载operator new和operator delete

 1:C++标准说:An allocation function shall be a class member function or a global function; a program is ill-formed if an allocation function is declared in a namespace scope other than global scope or

2009-09-15 10:27:00 5566 2

转载 windows API窗口消息分流器

对于熟悉Win API编程的同志们来说,windowsx.h这个头文件应该不会太陌生吧,这次要讲的内容就来自这个windowsx.h头文件。经常能在msdn上查到这样一些函数,明明是个函数,而且模样长得和一般的api函数也一样一样的,可却叫做macro,为什么呢?留意一下函数使用的requirement,你会发现,它的声明正是在windowsx.h这个头文件里。Windowsx.h包含了这样一些内

2009-09-14 22:56:00 1449 1

翻译 WaitForSingleObject函数用法

   等待函数可使线程自愿进入等待状态,直到一个特定的内核对象变为已通知状态为止。这些等待函数中最常用的是WaitForSingleObject:  DWORD WaitForSingleObject(HANDLE hObject, DWORD dwMilliseconds);当线程调用该函数时,第一个参数hObject标识一个能够支持被通知/未通知的内核对象。第二个参数dwMilli

2009-09-14 15:01:00 5193 2

翻译 多线程同步-event

   在所有的内核对象中,事件内核对象是个最基本的。它包含一个使用计数(与所有内核对象一样),一个BOOL值(用于指明该事件是个自动重置的事件还是一个人工重置的事件),还有一个BOOL值(用于指明该事件处于已通知状态还是未通知状态)。事件能够通知一个线程的操作已经完成。有两种类型的事件对象。一种是人工重置事件,另一种是自动重置事件。他们不同的地方在于:当人工重置的事件得到通知时,等待该事件的所

2009-09-14 13:52:00 5409 6

原创 typedef

typedef用来定义一个类型的别名。通常我们这样用:typedef unsigned int UINt; typedef的目的是为了简化某些很长的类型名的书写。比如说有一个类型声明很长,写起来太长了,这时你就可以使用typedef来给他取一个别名,更简短一点的。或者,你想给某些类型在特定的上下文里定义一个新的名字,例如STL里面的template {  .....

2009-09-14 13:15:00 835

原创 windows异常处理 __try __except

  try-except用法   try except是windows 系统独有的异常处理模型,windows的异常处理模式,称为SEH( structured exception handling ),       SEH的异常处理模型主要由try-except语句来完成,与标准的try catch相似。与C++异常处理模型使用catch关键字来定义异常处理模块,而SEH是采

2009-09-09 18:19:00 8502 1

原创 windows VARIANT

windows的VARIANT本质是含有类型信息的union。其结构如下: typedef struct tagVARIANT VARIANT; struct tagVARIANT  { union  { struct __tagVARIANT {   VARTYPE vt;   // typedef unsigned short VA

2009-09-08 15:51:00 1375

原创 windows 句柄

windows句柄,其实是在说这么一个类型: HANDLE,在windows.h里面,是这样定义的:LPVOID,其实就是一个void*。对于很多新手来说,句柄这个概念有点难以理解。 想要真正了解句柄,你必须首先要了解内核对象。不了解内核对象而空谈句柄,没有任何的意义。 windows内核对象是由操作系统内核分配的一块内存(储存着对象的相关信息), 这段内存只能由内核访问和管理

2009-09-07 16:59:00 1646

转载 c++资源大全

 C++ Programmers Cookbook 语言介绍 大全 (转来的文章)http://www.cppblog.com/mzty/archive/2007/08/13/29922.htmlC++随笔分类列表(高级)C++随笔分类列表(高级):C++精华:61条面向对象的设计原则 http://www.cppblog.com/mzty/archive/2005/

2009-09-07 16:13:00 1671

转载 c++ socket编程入门

 什么是 socket? 你经常听到人们谈论着 “socket”,或许你还不知道它的确切含义。现在让我告诉你:它是使用 标准Unix 文件描述 符 (file de script _ or) 和其它程序通讯的方式。什么?你也许听到一些Unix高手(hacker)这样说过:“呀,Unix中的一切就 是文件!”那个家伙也许正在说到一个事实:Unix 程序在执行任何形式的 I/O 的时候,程序是在读

2009-09-02 23:06:00 4153 1

原创 c++异常参数传递和普通函数参数传递的区别。

从语法上看,在函数里声明参数与在catch子句中声明参数是一样的,catch里的参数可以是值类型,引用类型,指针类型。例如:try{   .....}catch(A a){}catch(B& b){}catch(C* c){}  尽管表面是它们是一样的,但是编译器对二者的处理却又很大的不同。调用函数时,程序的控制权最终还会返回到函数的调用

2009-09-02 21:50:00 1870 1

原创 条件断点的设置和应用

什么是条件断点? 条件断点就是带有一个条件表达式的断点,在调试中,只有这个条件表达式为真时,程序到达断点时,才会暂停。而对于普通的断点,只要程序到达该断点是,就会暂停。这个条件表达式必须能被调试器识别和求值,,比如说在watch窗口里可以识别和求值的变量同样也可以在条件表达式里被识别和求值。这大大方便了我们调试某些问题,比如说,你在循环体内设置了一个断点(1000次循环),而这

2009-09-02 11:41:00 4339

c++ TR1 文档

c++ tr1de的文档 下一代c++标准库的候选成员 最新的c++技术

2009-04-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除