05 2012 档案

摘要:如果用户熟悉Linux下的sed、awk、grep或vi,那么对正则表达式这一概念肯定不会陌生。由于它可以极大地简化处理字符串时的复杂度,因此现在已经在许多Linux实用工具中得到了应用。千万不要以为正则表达式只是Perl、Python、Bash等脚本语言的专利,作为C语言程序 员,用户同样可以在自己的程序中运用正则表达式。 标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其中最著名的当数PhilipHazel的Perl-CompatibleRegularExpression库,许多Linux发行版本都带有这个函数库。 编译正则表达式 ... 阅读全文
posted @ 2012-05-20 11:16 Mr.Rico 阅读 (117) | 评论 (0) 编辑
摘要:算起来,我用Visual C++也有将近5年的历史了。在这期间,我也曾涉猎过Visual Basic和Delphi,但都是浅尝而止;Visual C++始终是我的主业。可是努力的成果如何呢?我用Delphi作出了十多个有规模的软件,用VB--虽然我用在VB上的时间只有短短的两三个月--也有 两个像样的项目;然而,在我付出了最大热情和最多努力的Visual C++上面,却只作出了三个自己看得上眼的软件。固然,在用 Visual C++的时候,MFC帮了我不少的忙。但是,在写下这个题目之时,我就已经打定主意:在这篇文章中,只对MFC提出批评,不说MFC的好话。Visual C++的拥护者... 阅读全文
posted @ 2012-05-20 10:54 Mr.Rico 阅读 (150) | 评论 (0) 编辑
摘要:最近在项目开发中,遇到一个异常,经过测试,发现是迭代器失效问题,于是稍微总结了一下。 vector迭代器失效测试: 测试程序: voidvectorTest(){vector<int>container;for(inti=0;i<10;i++){container.push_back(i);}vector<int>::iteratoriter;for(iter=container.begin();iter!=container.end();iter++){if(*iter>3)container.erase(iter);}for(iter=container 阅读全文
posted @ 2012-05-20 09:18 Mr.Rico 阅读 (7071) | 评论 (0) 编辑
摘要:了解各种不同意义的new 和 delete C++中关于new 的形态主要有三种:new operator, operator new, placement new 三者的用法有着不同,注意区别适用的条件: new operator: new 操作符,和C++语言其它操作符(如+, -, ->, ::....)一样,是由语言内建的,总是完成相同的事情,程序员不能改变其意义。如下为new的一种用法: string *ps = new string("hazirguo"); 它主要完成的任务包括三个方面: 分配足够的内存,用来放置某类型对象。上例中分配足够放置一个stri 阅读全文
posted @ 2012-05-17 13:19 Mr.Rico 阅读 (106) | 评论 (0) 编辑
摘要:了解临时对象的来源 什么是临时对象? C++真正的临时对象是不可见的匿名对象,不会出现在你的源码中,但是程序在运行时确实生成了这样的对象. 通常出现在以下两种情况: (1)为了使函数调用成功而进行隐式类型转换的时候。 传递某对象给一个函数,而其类型与函数的形参类型不同时,如果可以通过隐式转化的话可以使函数调用成功,那么此时会通过构造函数生成一个临时对象,当函数返回时临时对象即自动销毁。如下例: //计算字符ch在字符串str中出现的次数 int countChar (const string& str, char ch); char buffer[];... 阅读全文
posted @ 2012-05-17 12:46 Mr.Rico 阅读 (13439) | 评论 (10) 编辑
摘要:说说计算机中的异常 开篇 异常这个名词应该大家都不陌生,很多人都听说过。系统调用知道吧?其实系统调用也是一种异常。但是具体的什么是异常呢?他在计算机中有什么作用?他是如何工作,如何被我们利用的?我想很多人都还不都是很清楚。、 了解异常有诸多好处,可以让你更好的理解操作系统和应用程序的交互,更好的理解并发等。 所以今天就简单的来说一下异常。 注:本博文图片来源《Computer system-A Programmer's Perspective》 什么是异常 为了便于理解,我就不按照书本来了啊,异常可以这样理解: 计算机执行一个连续的指令序列,如:a1,a2,a3... 阅读全文
posted @ 2012-05-17 12:32 Mr.Rico 阅读 (108) | 评论 (0) 编辑
摘要:Vim 中使用 OmniComplete 为 C/C++ 自动补全 OmniComplete 并不是插件的名字,而是 Vim 众多补全方式中的一种(全能补全)。说白了 OmniComplete 其实就是根据光标前的内容猜测光标后的内容,具体怎么猜取决于所采用的脚本。 而 OmniCppComplete 就是专为 C/C++ 编写的 OmniComplete 一个补全脚本。 那么经常和 OmniCppComplete 一起出没的 Ctags 又是什么呢?Ctags 全名 Exuberant Ctags,是一个独立的程序(也就是说,其实和 Vim 一点... 阅读全文
posted @ 2012-05-15 17:08 Mr.Rico 阅读 (15492) | 评论 (2) 编辑
摘要:C语言可变参数实现 第一:什么是可变参数int printf(const char* format, ...);看到printf的定义大家就知道了,只有一个固定的const char*参数,后面的都是不定长的参数列表了。第二:自己写一个可变参数函数1.参数形参方式,跟printf类似,第一个为固定参数,后面的用...代替;2.包含stdarg.h头文件,因为需要用到几个里面定义的宏;void va_start(va_list arg_ptr, prev_param);type va_arg(va_list arg_ptr, type);void va_end(va_list arg_ptr). 阅读全文
posted @ 2012-05-15 15:48 Mr.Rico 阅读 (570) | 评论 (0) 编辑
摘要:这是从林建的博客转来的,写的非常不错。这是他的博客。 一、广泛了解,从科普书籍开始 选择计算机专业的同学,也许是因为原先有一定的基础,也许是因为一时的激情,但更多的人,可能对自己的选择没有深刻的认识,或多或少对计算机专 业有一些神秘的感觉。自己究竟是否喜欢这个学科?才华能够在哪个分支领域有所施展?抑或是真的不适合这个专业?诸多疑问,解决的方法首先便是了解和认识我 们的学科。浓厚的兴趣是学好任何学科的源泉;而广泛的了解则是获得兴趣的途径。当今我们对于信息的获取已非难事,其中“阅读”是一个简洁而有效的方法。 也许你认为阅读专业书籍对于刚刚步入大学的自己来说有点困难,也很枯燥,那么不妨先从科... 阅读全文
posted @ 2012-05-14 18:30 Mr.Rico 阅读 (502) | 评论 (3) 编辑
摘要:有下面的一个简单的类: classCNullPointCall{public:staticvoidTest1();voidTest2();voidTest3(intiTest);voidTest4();private:staticintm_iStatic;intm_iTest;};intCNullPointCall::m_iStatic=0;voidCNullPointCall::Test1(){cout<<m_iStatic<<endl;}voidCNullPointCall::Test2(){cout<<"VeryCool!"< 阅读全文
posted @ 2012-05-14 13:24 Mr.Rico 阅读 (4593) | 评论 (0) 编辑
摘要:一个map就是一个(关键码(key),值(value))对偶的序列,它提供基于关键码的快速提取操作。也就是说,可以用下标运算符[]将关键码 作为下标去执行查找,并返回对应的值。因此可以把map的使用方法想象成有特殊下标的数组。在很多时候用下标运算符[]来对map中的元素进行存取是非常 方便和简单的;但是,如果map下标运算符[]运用不得当,也会造成意想不到的问题。 我们知道,C++是不检查下标越界的。用超出数组下标范围的下标去访问数组元素的错误会在运行期出现,很有可能将程序搞崩溃。对于map而言,也没有类似 的下标越界概念,但是却有作为下标的关键码(key)在map中不存在的现象。在这种情况. 阅读全文
posted @ 2012-05-14 12:55 Mr.Rico 阅读 (119) | 评论 (0) 编辑
摘要:字符,字节和编码 [原创文章,转载请保留或注明出处:http://www.regexlab.com/zh/encoding.htm] 级别:中级 摘要:本文介绍了字符与编码的发展过程,相关概念的正确理解。举例说明了一些实际应用中,编码的实现方法。然后,本文讲述了通常对字符与编码的几种误解,由于这些误解而导致乱码产生的原因,以及消除乱码的办法。本文的内容涵盖了“中文问题”,“乱码问题”。 掌握编码问题的关键是正确地理解相关概念,编码所涉及的技术其实是很简单的。因此,阅... 阅读全文
posted @ 2012-05-13 17:34 Mr.Rico 阅读 (123) | 评论 (0) 编辑
摘要:转自:http://www.cppblog.com/franksunny/archive/2007/08/03/29269.html 主 要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代 码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这 类函数是不能运行在多任务环境下的。 也 可以这样理解,重入即表示重复进入,首先它意味着这个函数可以被中断,其次意味着它除了使用自己栈上的变量以外不依赖于任何环境(包括sta 阅读全文
posted @ 2012-05-12 18:20 Mr.Rico 阅读 (77) | 评论 (0) 编辑
摘要:我一直回避程序的内存管理,因为爱之愈深,恨之愈烈。但是,还是由很多的朋友一直在体这方面的问题,所以就索性把它坦白了,也许对你我都是一件好事情。 首先,需要搞清楚:变量的类型和它的存储类别是两个概念。 数据类型和内存管理没有直接的关系。 一、由C/C++编译的程序占用的内存分为以下几个部分: 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方... 阅读全文
posted @ 2012-05-08 15:24 Mr.Rico 阅读 (160) | 评论 (1) 编辑
摘要:很多人误以为shell脚本只能在命令行下使用。其实shell也可以调用一些GUI组件,例如菜单,警告框,进度条等等。你可以控制最终的输出,光标位 置还有各种输出效果。下面我将介绍一些工具,帮助你创建强大的,互动的,用户友好的 Unix/Linux shell脚本。我在FreeBSD和Linux下测试过这些工具,不过其他UNIX系列的操作系统应该都支持的。 1. notify-send 命令 这个命令可以让你通过通知进程发送一个桌面通知给用户。这可以用来向用户发送提示,或者显示一些信息而不用打断用户工作。你需要安装如下软件包: $ sudo apt-get install ... 阅读全文
posted @ 2012-05-08 14:23 Mr.Rico 阅读 (279) | 评论 (0) 编辑
摘要:摘要: 本文简述了随机数的产生原理,并用C语言实现了迭代取中法,乘同余法等随机数产生方法,同时,还给出了在符合某种概率分布的随机变量的产生方法。 关键词: 伪随机数产生,概率分布 1前言: 在用计算机编制程序时,经常需要用到随机数,尤其在仿真等领域,更对随机数的产生提出了较高的要求,仅仅使用C语言类库中的随机函数已难以胜任相应的工作。本文简单的介绍随机数产生的原理及符合某种分布下的随机变量的产生,并用C语言加以了实现。当然,在这里用计算机基于数学原理生成的随机数都是伪随机数。 注:这里生成的随机数所处的分布为0-1区间上的均匀分布。我们需要的随机数序列应具有非退化性,周期长,相关系数... 阅读全文
posted @ 2012-05-07 15:40 Mr.Rico 阅读 (12763) | 评论 (0) 编辑
摘要:字符串字面量(string literal)是一段双引号括起来的多字节字符序列,C/C++将其实现为具有静态存储连续性的字符数组。初学者(包括不少书籍)常将其称为字符串常量,但这说法只在C++成立,C中不成立。C中的常量只包括下列四种: 6.4.4 Constants Syntax constant: integer-constant floating-constant enumeration-constant character-constant 分别是整数常量、浮点常量、枚举常量和字符常量,并不包括字符串字面量。但由于字符串字面量具有静态存储连续性数组类型,并且在表达式中它会根据数组到.. 阅读全文
posted @ 2012-05-01 20:32 Mr.Rico 阅读 (550) | 评论 (0) 编辑