- 博客(42)
- 资源 (26)
- 收藏
- 关注
转载 关于指针和内存的几个问题
一、"delete p" 会删去 "p" 指针,还是它指到的资料,"*p" ? 该指针指到的资料。"delete" 真正的意思是:「删去指针指到的东西」(delete the thing pointed to by)。同样的英文误用也发生在 C 语言的「释放」指标所指向的记忆体("free(p)"真正的意思是:"free_the_stuff_pointed_to_by(p)" )
2010-04-25 17:36:00 476
原创 最大公约数与最小公倍数简单代码
1、求二个数的最大公约数: int MyGCD(int a, int b){ int temp = 0; while(a % b) { temp = b; b = a % b; a = temp; } return b;}2、求二个数的最小公倍数int MyGCM(int a, int b){ int t
2010-04-25 17:16:00 628
转载 C++ 中什么是内联函数
引入内联函数的目的是为了解决程序中函数调用的效率问题。 函数是一种更高级的抽象。它的引入使得编程者只关心函数的功能和使用方法,而不必关心函数功能的具体实现;函数的引入可以减少程序的目标代码,实现程序代码和数据的共享。但是,函数调用也会带来降低效率的问题,因为调用函数实际上将程序执行顺序转移到函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种
2010-04-25 17:11:00 800
原创 _countof宏应用
在MSDN上面查到一个宏_countof,很好用,作用是可以直接返回静态数组的元素个数。MSDN上这么介绍这个宏的: _countof宏:计算静态数组元素的个数。用法:_countof(array); 所需头文件: 示例如下:#define _UNICODE #include #include #include int main( void ){ _TCHA
2010-04-21 19:22:00 5773 2
转载 C++中的模板(template)
网上我最喜欢的技术文章是类似某何君所著“CVS快速入门”或者“UML reference card”之类,简短扼要,可以非常快的领着你进入一个新天地。而对于比较长的文章我通常是将其保存到硬盘上,然后准备着“以后有时间”的时候再看,但它们通常的命运都是“闲坐说玄宗”,直到某一天在整理硬盘时将它们以“不知所云”入罪,一并删除。 这篇小文主要是针对刚刚接触模板概念的读者,希望能帮助读
2010-04-21 19:15:00 926
原创 C++中的引用(reference)
1.简介 引用是C++引入的新语言特性。从语意上来说,引用就是一个变量的别名,就好象古代人的“字”和“号”,东坡居士和苏轼只是一个人的不同称呼。对引用的操作对变量产生的影响与对变量直接操作完全一样。例如: int i = 0; int & iRef = i; iRef++; // i = iRef = 1 尽管引用不使用指针的操作符(*, ->)但是,它看上去跟指针
2010-04-21 19:13:00 589
转载 C++中的虚函数(virtual function)
1.简介 虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。假设我们有下面的类层次:class A{public: virtual void foo() { cout };class B: public A{public: virtual void foo() { cout }; 那么,在使用的时候,我们可以:
2010-04-21 19:11:00 408
原创 sizeof()用法汇总
sizeof()功能:计算数据空间的字节数 1.与strlen()比较 strlen()计算字符数组的字符数,以"/0"为结束判断,不计算为/0的数组元素。 而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。 2.指针与静态数组的sizeof操作 指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果
2010-04-18 09:50:00 395
转载 如何编写异常安全的C++代码
关于C++中异常的争论何其多也,但往往是一些不合事实的误解。异常曾经是一个难以用好的语言特性,幸运的是,随着C++社区经验的积累,今天我们已经有足够的知识轻松编写异常安全的代码了,而且编写异常安全的代码一般也不会对性能造成影响。 使用异常还是返回错误码?这是个争论不休的话题。大家一定听说过这样的说法:只有在真正异常的时候,才使用异常。那什么是“真正异常的时候”?在回答这个问题以前,让我们先
2010-04-18 09:46:00 489
原创 一个扩展后的CListCtrl类和CHeaderCtrl类 (二)
// HeaderCtrlCl.cpp : 实现文件// #include "stdafx.h"#include "DemoList.h"#include "HeaderCtrlCl.h" // CHeaderCtrlCl IMPLEMENT_DYNAMIC(CHeaderCtrlCl, CHeaderCtrl) CHeaderCtrlCl::CHea
2010-04-16 22:27:00 1569 1
原创 一个扩展后的CListCtrl类和CHeaderCtrl类 (一)
HeaderCtrlCl.h #pragma once // CHeaderCtrlCl class CHeaderCtrlCl : public CHeaderCtrl{ DECLARE_DYNAMIC(CHeaderCtrlCl) public: CHeaderCtrlCl(); virtual ~CHeade
2010-04-16 22:18:00 1742
转载 C++ 中重载 + 操作符的正确方法
用户定义的类型,如:字符串,日期,复数,联合体以及文件常常重载二元 + 操作符以实现对象的连接,附加或合并机制。但是要正确实现 + 操作符会给设计,实现和性能带来一定的挑战。本文将概要性地介绍如何选择正确的策略来为用户定义类型重载这个操作符。考虑如下的表达式: int x=4+2; 内建的 + 操作符有两个类型相同的操作数,相加并返回右值 6,然后被赋值给 x。我们可以断定内建的 +
2010-04-16 22:07:00 475
原创 C++回调函数(callback)与仿函数(functor)的异同
回调函数(callback)与仿函数(functor)很多时候从用途上来看很相似,以致于我们经常将它们相提并论。例如:inline bool compare(int a, int b){ return a > b;} struct comparer { bool operator()(int a, int b) const { return a > b; }}; void ma
2010-04-14 22:31:00 605
转载 CString字符串转换为十六进制字符串
最近在做项目时遇到这个问题,比如将汉字“冲”转换后为“51B2”,程序使用的是unicode字符集,下面是通过查资料后整理的解决方法://---------------------------------------------------------------------//函数:W2C//功能:将16位wchar_t转换为 8位char[2]//参数:w_cn为待转换的16位字符,c_
2010-04-14 22:30:00 3741
转载 C/C++ 编程中多国语言处理
问题的提出 多国语言的存在、不同语言操作系统的存在,使得针对多语言的设计颇费周章,在编码上所付出的工作量也是可观的。所谓编码的问题,归结起来,就是二进制的编码以何种编码格式进行解析的问题。特别是在硬盘文件和内存数据的相互转化、即读写过程中,如果采用了错误的编码格式,就会造成乱码。JAVA 语言在字符串、编码等处理方面给了程序员更为直接、方便的接口,习惯使用 JAVA 做编码的程序员,在使用
2010-04-14 22:22:00 1184
转载 明明白白看MFC之程序框架
对于程序员来说,如果要提高编程效率,一个好用的,功能强大的并且可以得心应手使用的编程工具往往会给我们程序员带来莫大的方便。其实对于现在的编程工具来说,使用哪 一种工具都不是问题的关键,重要的是你能够使用到什么程度,毕竟现在的工具都是非常的强大,对于一般的编程任务来说还没有不能够胜任的工具,否则的话恐怕他就不可能在这个世界上存在哪怕是只有一个月的生命。但是根据个人所好以及周围的人的影响,我
2010-04-12 21:46:00 1165
转载 深入 CSocket 编程之阻塞和非阻塞模式
有时,花上几个小时阅读、调试、跟踪优秀的源码程序,能够更快地掌握某些技术关键点和精髓。当然,前提是对这些技术大致上有一个了解。 我通过几个采用 CSocket 类编写并基于 Client/Server (客户端 / 服务端)的网络聊天和传输文件的程序 ( 详见: 源代码参考 ) ,在调试这些程序的过程中,追踪深入至 CSocket 类核心源码 Sockcore.cpp , 对于CSocket 类
2010-04-12 21:43:00 801
转载 《C++0x漫谈》系列之:右值引用
右值引用(及其支持的Move语意和完美转发)是C++0x将要加入的最重大语言特性之一,这点从该特性的提案在C++ - State of the Evolution列表上高居榜首也可以看得出来。从实践角度讲,它能够完美解决C++中长久以来为人所诟病的临时对象效率问题。从语言本身讲,它健全了C++中的引用类型在左值右值方面的缺陷。从库设计者的角度讲,它给库设计者又带来了一把利器。从库使用者的角度讲,不
2010-04-12 21:36:00 686
原创 C++中的内存划分
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
2010-04-12 21:34:00 459
转载 AVL树的实现代码
本文示例源代码或素材下载/********************************************************************created: 2007/08/28filename: avltree.cauthor: Lichuangpurpose: AVL树的实现代码, 参考资料>, 作者Allen Weis
2010-04-11 17:50:00 1540 1
转载 红黑树的实现源码
最近因为要给ccache加入红黑树的支持, 找出来曾经实现的代码作为参考, 这才发现原来的实现都是有问题的,也怪我的测试用例写的不好, 仅仅对插入操作进行了测试, 我向所有因为阅读了这份代码而造成困惑的朋友表示道歉. 这次重新实现, 所有的代码推倒重新编写, 参考了linux内核中红黑树的实现算法, 并且对测试用例进行了加强,希望这是最后一个对红黑树算法的修订版本./*---------
2010-04-11 17:46:00 447
转载 仿STL中的堆算法的一个实现
堆的性质之类的不再这里阐述,写这个算法只为了更好的理解STL中的堆算法,如果看不懂STL中的算法也可以来参考这里给出的算法,因为是纯C的看起来会省去很多语言方面的细节。 同时里面还有一个STL中对应算法的测试以比较两者的效果。/******************************************************************** created:
2010-04-11 17:39:00 445
原创 二分查找算法
Bentley在他的著作《Writing Correct Programs》中写道,90%的计算机专家不能在2小时内写出完全正确的二分搜索算法。 我自己尝试了一下,确实要第一次就完全写正确不容易.以下两份实现依次为迭代和递归版本的代码,二分查找的思想很多人都清楚,但是这里有一个细节就是要注意边界的选择.int search(int array[], int n, int
2010-04-11 17:33:00 463
转载 c++ using nameace 详解
所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。 一 : 和是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。 后缀为。h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,
2010-04-11 17:25:00 629
转载 C++中struct与Cla的的区别
在C++中struct与Class可以说是没有区别,但是又可以说是很大区别。 因为C++要向下兼容C。所以C具有的东西,那么在C++里也具有。所以谈struct应该是从C谈起 struct在C中:struct是一种自定义的数据类型。既然是一种数据类型那么就肯定不能定义函数。C是面向过程的,面向对象的东西它自然也不具有。 struct在C++中;C++是面向对象的。根据对
2010-04-11 17:23:00 1194
原创 VS2005安装Boost_1_42_0
1.下载boost_1_42_0压缩文件,解压缩到d:/boost_1_42_0/目录下2.编译bjam从vs2005的工具菜单进入命令提示窗口(一定要从这进),cd到d:/boost_1_42_0/tools/jam/src下执行build.bat,会在d:/boost_1_42_0/tools/jam/src/bin.ntx86/產生bjam.exe,將bjam.exe複製到d:/bo
2010-04-10 14:00:00 2682
转载 两篇很牛的vim使用技巧
读本文之前请注意:1. 本文的目标是提供一些vim的使用技巧,利用这些技巧可以提高vim的操作效率。部分技巧在vi上也可以使用,但是现在基本上都是用vim了。2. 本文是整理和总结使用技巧,而非讲解vim入门,因此不会涉及最基本的使用,例如如何上移或下移光标,对此类操作请参阅任何一本vim或者vi教程。3. 本文阅读对象是了解了vim的基本操作,而希望高效地利用vim进行工作的人。熟练使用vim的
2010-04-10 13:52:00 475
转载 彻底理解C、C++、Win32与COM中的字符串
C/C++中的字符串问题在网上的讲解一向非常含糊,存在各个层次的库混用、滥用的情况,尤其是宽字符与窄字符等问题很难找到有效的资料,本篇随笔分享一下我长期收集到的一些比较准确的资料以及据此得到的个人理解. C语言中的字符串 C语言中提供了两种字符类型char和wchar_t,C语言使用字符数组来表示字符串,同时支持两种直接量写法:"abcd"和 L"abcd" 来表示字符串常量文字量,
2010-04-08 22:47:00 524
原创 在linux下编译boost库
编译环境 操作系统:Red Hat linux Enterprise Server 5.0 32bit 编译工具:gcc 4.1.2 1.下载boost 1.42.0 2.解压boost到/usr/share 3.在命令行运行/usr/share/boost_1_42_0/tools/jam/src/build.sh生成bjam 4.复制/usr/share/b
2010-04-08 22:38:00 1774
转载 Windows平台下的多线程编程
线程是进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享所有的进程资源,包括打开的文件、信号标识及动态分配的内存等。一个进程内的所有线程使用同一个地址空间,而这些线程的执行由系统调度程序控制,调度程序决定哪个线程可执行以及什么时候执行线程。线程有优先级别,优先权较低的线程必须等到优先权较高的线程执行完后再执行。在多处理器的机器上,调度程序可将多个线程 border=0 margi
2010-04-07 23:13:00 574
转载 关于Windows编程的一些心得
windows操作系统是靠消息的驱动的,所有的事件都被封装为各种各样的消息,系统和其他程序通过接受消息,分析消息附带的参数,再分别进行相关的处理,然后完成相关的任务。不管用什么语言,或者什么开发工具,只要是在windows下可以运行的程序,在他的本质上都有一个接受消息、处理消息的循环。这就是win32程序乃至整个windows操作系统本身的运做本质。 windows自己定义了很
2010-04-07 23:09:00 723
原创 关于数值和字符串转换的两个函数
以下是数值和字符串之间互相转换的两个函数。 1. 从字符串转换为整型数字。int StrToNum(LPCTSTR _strIn){ int loop = 0;int base = 0; //代表进制int _retNum = 0; CString cStr = _strIn;
2010-04-06 23:20:00 808
原创 两道测试题的解决方案
1. 不用库函数,实现atoi。 以下是个人实现由char转为int型的一种特殊的代码(只针对于10进制的),如下:long long atoi(const char* str){ if (*str == /0) { return 0; } long long _ret = 0; while (*str !=
2010-04-06 23:04:00 513
原创 C++中extern “C”详解
一直知道在C++中用extern “C” { }调用C语言,但是不知道为什么,虽然也知道编译器的命名规则,不过没有联想到这个上面,看到这篇文章,才恍然大悟。不过,因为自己一直在linux下使用C语言,没有使用C++的经验的缘故吧,希望以后能有,这样才能融会贯通。关键点:函数重载,命名规则一、C++与C机制编译后,也就在汇编语言阶段,函数名的不同:时常在cpp的代码之中看到这样的代码:d
2010-04-05 22:42:00 430
原创 C++中extern “C”含义深层探索
1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不
2010-04-05 22:41:00 302
转载 volatile用法详解
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic var
2010-04-05 22:34:00 468
转载 const使用详解
关于C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,现将本人的一些体会总结如下,期望对大家有所帮助: 一 const基础如果const关键字不涉及到指针,我们很好理解,下面是涉及到指针的情况: int b = 500;const int* a = &b; [1]int const *a = &b; [2]int* const a = &b
2010-04-04 18:49:00 402
转载 Static 作用详述
1.先来介绍它的第一条也是最重要的一条:隐藏 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c.下面是a.c的内容: char a = A; // global variable void msg()
2010-04-03 17:38:00 393
转载 GCC使用入门
本文将向读者介绍在Linux平台下应用程序的编译过程,以及编译程序GCC在编译应用程序的过程的具体用法,同时详细说明了GCC的常用选项、模式和警告选项。通常所说的GCC是GUN Compiler Collection的简称,除了编译程序之外,它还含其他相关工具,所以它能把易于人类使用的高级语言编写的源代码构建成计算机能够直接执行的二进制代码。GCC是Linux平台下最常用的编译程序,它是Lin
2010-04-02 13:16:00 337
原创 C++相关网站
以下是我收集的一些开发网站。http://search.csdn.net/CSDN搜索,CSDN还是有非常多的编程资源的,用它的搜索能搜出不少东西。代码类别也比较全面。http://snippets.org/简单实用的代码收集网站,强力推荐。比如你要找个DES加密,要找个数据压缩,找个INI文件操作的C代码等,均能手到擒来。http://www.codase.com/index.html它是一个代
2010-04-01 23:15:00 489
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人