
C++基础
文章平均质量分 70
ShenRui
不要只会编码,交流比编码更重要
展开
-
如何使用memcpy向容器里拷贝数据
无疑容器(std::vector)在开发的过程中作为动态数组的首选,但是直接使用push和pop存取的话在很多时候显得很无力。 例如在图形处理的时候如果想用std::vector bitmap来存放图像数据,当向bitmap里拷贝数据的时候如果一个字节一个字节的压,我想谁都难以忍受,结果得出结论用容器来存放这样大量的二进制数据很不方便,不如直接开内存用指针处理。 那容器能不能使原创 2008-05-14 11:07:00 · 6700 阅读 · 0 评论 -
单件模式之土著人的可乐瓶
下载源代码 话说一群土著人生活地球的某个不为人知的地方,他们过着和谐、快乐的日子。但是好景不长,一只从天上掉下来的玻璃瓶打破了这美好的时光。这只玻璃瓶用处非常广泛,有的土著人用它来砸地瓜,有的用它来吹口哨,有的用它来擀蛇皮……,渐渐地大家干活、娱乐都离不开它了,于是产生了争抢使用可乐瓶的情况,为了获得原有的和谐气氛,一个土著人决定扔掉这个瓶子…… 剧情讲完了,我们先为这个瓶子定义一个转载 2008-12-22 14:37:00 · 637 阅读 · 0 评论 -
内存映射修改大文件
下载源代码 本文介绍利用内存映射文件修改大文件:在大文件内存前加入一段数据,若要使用内存映射文件,必须执行下列操作步骤:创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存映射文件的文件; 创建一个文件映射内核对象,告诉系统该文件的大小和你打算如何访问该文件; 让系统将文件映射对象的全部或一部分映射到你的进程地址空间中; 当完成对内存映射文件的使用时,必须执行转载 2008-12-22 15:59:00 · 1951 阅读 · 0 评论 -
关于内存对齐
曾经接手一个网络视频监控程序,主要是上层软件通过 发送控制指令获取网络视频板的视频数据和控制网络 视频板, 这应该是一个比较简单的流程! 一切的开发都很顺利,测试的时候,问题就来了,获取视 频数据流的数据竟然是错误的,我糊涂了,把整个程序 流程,用调试器一步一步地跑,到了发送视频指令的时候,返回 指令操作错误的结果,怎么回事? 我是按照视频的操作指令封装的数据包,内存显示数据 包的内容是没有错误转载 2008-12-22 16:05:00 · 568 阅读 · 0 评论 -
URL match
#include #include /** * assumed URI * scheme://[user@][host][:port]/[path][?query][#fragment] */class URI {public: std::string scheme; std::string authority; std::string use原创 2009-10-26 16:49:00 · 1683 阅读 · 0 评论 -
【C++】析构函数和virtual函数引发的隐晦问题 ——《Effective C++》读书笔记5
【C++】析构函数和virtual函数引发的隐晦问题 ——《Effective C++》读书笔记52009-03-18 06:23用工厂模式的时候,我们常常将一个基类指针指向子类对象,以此来实现多态。但是,当调用delete析构这个基类指针的话,就有一个潜藏的危机:当子类对象经由一个基类指针被删除,而该基类带着一个非virtual析构函数,其结果是不能预料的——实际执转载 2010-02-25 16:51:00 · 766 阅读 · 0 评论 -
C++ 虚函数表解析
陈皓http://blog.youkuaiyun.com/haoel 前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我转载 2010-07-07 09:14:00 · 449 阅读 · 0 评论 -
ANSI - unicode 関数対応表
Unicode プログラミングを行う上で、 ANSI 版で作成、通常利用していた関数名を変えなければならない場合が多々ありますね。 ちょっと、わかる範囲で対応表を作ってみました。 (と言っても、tchar.h みれば、殆どわかるんですけどね・・・あ、まちがっていたら、ゴメンなさい)ANSI 版unicode 版共用仕様(tchar 版)備考Programmainwmain_tmainメイン関数WinMainwWinMain_tWinMainWindows メイン関数(ですが、WinMain のままでも un转载 2010-12-08 08:48:00 · 1388 阅读 · 0 评论 -
C语言中实现模板函数小结
<br /><br /> 如果要写个函数支持多种数据类型,首先想到的就是C++的模板了,但是有时候只能用C语言,比如在linux内核开发中,为了减少代码量,或者是某面试官的要求…<br /> 考虑了一阵子后,就想到了qsort上.qsort的函数原型:<br />void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );<转载 2011-05-10 12:48:00 · 16382 阅读 · 1 评论 -
C语言实现stack模板
看了bsd的源码,才知道C语言能通过宏实现C++模板的功能,真是太强大了! 我也学习着写了一个stack模板。有什么好的建议欢迎留言啊~~ "stack.h" #ifndef MICRO_STACK_H #define MICRO_STACK_H #include #include #define STACK_NODE(name) name##__node #define STACK_TEMPLATE(name,type) / struct STACK_NODE(nam转载 2011-05-10 12:44:00 · 5546 阅读 · 1 评论 -
深入分析 Linux 内核链表
<br /> <br /><br />链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。<br />通常链表数据结构至少应包含两个域:数据域和指针域,数据域用于存储数据,指针域用于建立与下一个节点的联系。按照指针域的组织以及各个节点之间的联系形式,链表又可以分为单链表、转载 2011-05-17 17:11:00 · 634 阅读 · 0 评论 -
C 语言的谜题
我们可以看到很多C语言相关的一些东西。比如《语言的歧义》主要告诉了大家C语言中你意想不到的错误以及一些歧义上的东西。而《谁说C语言很简单》则通过一些看似你从来不可能写出的代码来告诉大家C语言并不是一件容易事情。《6个变态的hello world》和《如何弄乱C的源代码》则以一种极端的方式告诉大家,不要以为咱们自己写不出混乱的代码,每个程序员其实都有把代码搞得一团乱的潜质。通过这些文章,相信你对编程转载 2010-10-15 15:08:00 · 466 阅读 · 0 评论 -
剖析C++标准库智能指针(std::auto_ptr)
1.Do you Smart Pointer? Smart Pointer,中文名:智能指针, 舶来品? 不可否认,资源泄露(resource leak)曾经是C++程序的一大噩梦.垃圾回收 机制(Garbage Collection)一时颇受注目.然而垃圾自动回收机制并不能 满足内存管理的即时性和可视性,往往使高傲的程序设计者感到不自在转载 2011-12-01 15:56:23 · 802 阅读 · 0 评论 -
英中术语对照
以下是侯捷个人陆续收集整理的有关於我所涉猎的领域的术语对照(英中繁简)。欢迎所有朋友给我意见(任何意见)。谢谢。新书写作,或发表文章时,我会以此表为叁考。本表所列,并不表示我在写译书籍时一定会采用表内的中文术语。我也可能采用英文术语。一群性质相近同的「东西」,如果译名一贯,阅读的感觉就很好。一贯性的术语,扩充性高,延伸性高,系统化高。● 我喜欢「式」:constructor 建构式declara转载 2008-12-22 14:07:00 · 593 阅读 · 0 评论 -
从printf谈可变参数函数的实现
摘要:一直以来都觉得printf似乎是c语言库中功能最强大的函数之一,不仅因为它能格式化输出,更在于它的参数个数没有限制,要几个就给几个,来者不拒。printf这种对参数个数和参数类型的强大适应性,让人产生了对它进行探索的浓厚兴趣。 关键字:printf, 可变参数 1. 使用情形 int a =10;double b = 20.0;char *str = "Hello wo转载 2008-12-22 13:47:00 · 433 阅读 · 0 评论 -
条件编译小结
编码的时候经常要用到条件编译,每次都到网上去查比较浪费时间,今天总结一下以备后用 编译器GCC#ifdef __GNUC__#if __GNUC__ >= 3 // GCC3.0以上Visual C++#ifdef _MSC_VER(非VC编译器很多地方也有定义)#if _MSC_VER >=1000 // VC++4.0以上#if _MSC原创 2009-02-12 14:44:00 · 5638 阅读 · 0 评论 -
利用operator实现隐式类型转换的简单应用
最近在网上看到关于利用operator进行隐式类型转换的方法,示例如下:class A { public: operator bool(void) { return b; } private: bool b; }; void main(void) { A a; bool b; if(a) {原创 2008-05-14 15:53:00 · 1290 阅读 · 0 评论 -
vc数据类型转换大全-1
vc数据类型转换大全2007年07月10日 星期二 18:40int i = 100;long l = 2001;float f=300.2;double d=12345.119;char username[]="程佩君";char temp[200];char *buf;CString str;_variant_t v1;_bstr_t v2;一、其它数据类型转换为字符串短整转载 2008-07-29 14:52:00 · 776 阅读 · 0 评论 -
vc数据类型转换大全-2
作者:程佩君刚接触VC编程的朋友往往对许多数据类型的转换感到迷惑不解,本文将介绍一些常用数据类型的使用。我们先定义一些常见类型变量借以说明int i = 100;long l = 2001;float f=300.2;double d=12345.119;char us转载 2008-07-29 14:53:00 · 625 阅读 · 0 评论 -
dump call stack 的实现
闲来无事作点翻译工作,今天要介绍的是关于错误处理的.以下内容大部分不是我的原创,我只是把他们收集到一起来了而已. 错误处理在一个系统里面算是一个比较底层的东西了.拥有一个稳定的错误处理系统,是一个良好的系统的基础.从发展的角度看,错误处理大体有下面几种方式. 比较基础的,使用返回值表示错误还是正确,比如使用int作为返回值,0表示正常1表示错误,这种算是c语言里面的办法了,比如windo转载 2008-05-29 14:36:00 · 4978 阅读 · 2 评论 -
取得Windows版本(比价全,到Vista)
鬼子那拔来的,现有的版本都check了 /////////////////////////////////// ↓main.c// *コンパイル時のWindowsバージョン指定についてはWINVERマクロなどを参照#include #include #include // bcc55では定義されてない定数(BCCでコンパイルするとき必須)#if defined(__BORLANDC__)#转载 2008-08-26 14:18:00 · 1085 阅读 · 0 评论 -
C++对象布局及多态实现之带虚函数的类
如果类中存在虚函数时,情况会怎样呢?我们知道当一个类中有虚函数时,编译器会为该类产生一个虚函数表,并在它的每一个对象中插入一个指向该虚函数表的指针,通常这个指针是插在对象的起始位置。所谓的虚函数表实际就是一个指针数组,其中的指针指向真正的函数起始地址。我们来验证一下,定义一个无成员变量的类C040,内含一个虚函数。 struct C转载 2008-06-04 15:24:00 · 458 阅读 · 0 评论 -
VS2003=>VS2005在VC上的一些变化
最近, 找到一个界面库. 想把它转化为VS2005下编译, 岂知出现了NNNNNNNNN个错误!!!这才恍然大悟: VS2003到VS2005在VC上还是改动了不少!!!下面是对这些变化的总结: 1. 变量作用域 在vc7.1中, 如果一个变量定义在for语句的条件从句中,那么这个变量可以在for之后使用。但Vc8禁止这样,会报告一个C2065错误. for (int i = 0; i 10转载 2008-06-11 15:37:00 · 2154 阅读 · 1 评论 -
char*和CString转换
CString 是一种很特殊的 C++ 对象,它里面包含了三个值:一个指向某个数据缓冲区的指针、一个是该缓冲中有效的字符记数(它是不可存取的,是位于 CString 地址之下的一个隐藏区域)以及一个缓冲区长度。 有效字符数的大小可以是从0到该缓冲最大长度值减1之间的任何数(因为字符串结尾有一个NULL字符)。字符记数和缓冲区长度被巧妙隐藏。(1) char*转换成CString 若将char*转载 2009-01-06 14:49:00 · 1764 阅读 · 0 评论 -
CString 操作指南
[ 翻译文档 本文适合中级读者 已阅读70839次 ] 文档 代码 工具 CString 操作指南原著:Joseph M. Newcomer翻译:littleloach原文出处:codeproject:CString Management通过阅读本文你可以学习如何有效地使用 CString转载 2009-01-06 14:30:00 · 585 阅读 · 0 评论 -
关于CString总结
前言:串操作是编程中最常用也最基本的操作之一。 做为VC程序员,无论是菜鸟或高手都曾用过Cstring。而且好像实际编程中很难离得开它(虽然它不是标准C++中的库)。因为MFC中提供的这个类对我们操作字串实在太方便了,CString不仅提供各种丰富的操作函数、操作符重载,使我们使用起串起来更象basic中那样直观;而且它还提供了动态内存分配,使我们减少了多少字符串数组越界的隐患。但是,我们在使用转载 2009-01-06 14:32:00 · 872 阅读 · 0 评论 -
CString/string/char *比较详解
(一) 概述string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中;CString(typedef CStringT> CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR转载 2009-01-06 14:47:00 · 639 阅读 · 0 评论 -
POSTTHREADMESSAGE
把window线程间传送消息仔细的看了一遍,觉得以前的理解很不深刻。说一说对PostThreadMessage的理解。PostThreadMessage是一个线程体发送一个消息到指定的线程ID,其原型如下:BOOL PostThreadMessage( DWORD idThread,转载 2009-01-15 17:29:00 · 2391 阅读 · 0 评论 -
XP工程移植Vista上找不到msxml.dll错误
解析XML文件使用到了微软的msxml ,在xp下使用的时候,只要#import 编译就可以顺利通过,当把工程移植到Vista上的时候就会遇到找不到 msxml.dll的错误。 原来在Vista上msxml.dll升级为msxml6.dll,只要把#import 改成#import 相应using namespace MSXML改成using namespace MSXML2编原创 2009-02-04 14:32:00 · 2854 阅读 · 0 评论 -
智能指针 std::auto_ptr 和 shared_ptr
转载:http://blog.sina.com.cn/s/blog_508938e10100f12x.htmlauto_ptr 类可以用于管理由 new 分配的单个对象,但是无法管理动态分配的数组(我们通常不会使用数组,而是使用 vector 代替数组)。auto_ptr 在拷贝和赋值的时候有不寻常的行为,因此 auto_ptrs 不能被保存在 stl 的容器中。当 auto_ptr 离开转载 2011-12-01 16:03:39 · 967 阅读 · 0 评论