`
Riddick
  • 浏览: 640339 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论
文章列表
上一个帖子“语法”由于篇幅有限,没来得及聊异常,现在把和异常相关的部分单独拿出来说一下。   ★小心new分配内存失败   早期的老式编译器生成的代码,如果new失败会返回空指针。我当年用的Borland C++ 3.1似乎就是这样的,现在这种编译器应该不多见了。如果你目前用的编译器还有这种行为,那你就惨了。你可以考虑重载new操作符来抛出bad_alloc异常,便于进行异常处理。   稍微新式一点的编译器,就不是仅仅返回空指针了。当new操作符发现内存告急,按照标准的规定(参见03标准18.4.2章节),它应该去调用new_handler函数(原型为typedef void (*new_ ...
目前还有相当一部分开发人员在使用老式编译器干活,这些老式编译器可能对C++98支持不够。因此,当你的代码移植到这些老式的编译器上时,可能会碰到一些稀奇古怪的问题(包括编译出错和运行时错误)。下面这些注意事项有助于你绕过这些问题。   强调一下,后面提到的好几个条款都是通过回避C++的新语法来保证移植性。如果你用的是新式编译器,那么你可以不理会这些条款。   ★小心for循环变量的作用域(不支持新标准)   在C++98标准中,for循环变量的作用域局限在循环体内。而某些老的编译器(例如Visual C++ 6)认为for循环变量的作用域在循环体外。所以如下的代码可能导致移植问题。 {   ...
在跨平台的开发过程中,很多问题都和编译器有关。因此我们先来聊聊编译器相关的问题。     ★编译器的选择     首先,GCC是优先要考虑支持的,因为几乎所有操作系统平台都有GCC可用。它基本上成了一个通用的编译 ...
归并排序的算法思想是分而治之(divide - conquer),每个递归过程分为三个步骤: 1) 分解:把待排序的n个元素的序列分解成两个子序列,每个子序列包括n/2个元素 2) 治理:对每个子序列分别调用归并排序(MergeSort),进行归并操作 3) 合并:合 ...

cin.eof()

cin.eof()返回流结束位,如: char gc; while(!cin.eof()) //直至按ctrl+z键退出!控制台窗口中,用ctrl+z来模拟文件结束符 { cin>>gc; cout<<gc<<endl; }  相应的,在C中使用的是scanf,如 int M, N; while(scanf("%d%d", &M, &N) != EOF) { ..... }   

完全数

 
[定义] 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数:它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。后面的数是496、8128等等。例如:6=1+2+3 28=1+2+4+7+14496=1+2+4+8+16+31+62+124+2488128=1+2+4+8+16+32+64+127+254+508+1016+2032 ...
一、 常用日期数据格式 1.Y或YY或YYY 年的最后一位,两位或三位 SQL> Select to_char(sysdate,'Y') from dual; TO_CHAR(SYSDATE,'Y') -------------------- 7 SQL> Select to_char(sysdate,'YY') from dual; TO_CHAR(SYSDATE,'YY') --------------------- 07 SQL> Select to_char(sysdate,'YYY') from dual; TO_CHAR(SYSDATE,'YYY') ------- ...
1、DUAL表的用途Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中 --查看当前连接用户 SQL> select user from dual; USER ------------------------------ SYSTEM --查看当前日期、时间 SQL> select sysdate from dual; SYSDATE ----------- 2007-1-24 1 SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from d ...
前言:   半年前我对正则表达式产生了兴趣,在网上查找过不少资料,看过不少的教程,最后在使用一个正则表达式工具RegexBuddy时发现他的教程写的非常好,可以说是我目前见过最好的正则表达式教程。于是一直想把他翻译过来。这个愿望直到这个五一长假才得以实现,结果就有了这篇文章。关于本文的名字,使用“深入浅出”似乎已经太俗。但是通读原文以后,觉得只有用“深入浅出”才能准确的表达出该教程给我的感受,所以也就不能免俗了。     本文是Jan Goyvaerts为RegexBuddy写的教程的译文,版权归原作者所有,欢迎转载。但是为了尊重原作者和译者的劳动,请注明出处!谢谢!     1.什么 ...
主要从以下几部分来说明,关于内存和内存泄露、溢出的概念,区分内存泄露和内存溢出;内存的区域划分,了解GC回收机制;重点关注如何去监控和发现内存问题;此外分析出问题还要如何解决内存问题。   下面就开始本篇的内容:   第一部分 概念   众所周知,java中的内存由java虚拟机自己去管理的,他不像C++需要自己去释放。笼统地去讲,java的内存分配分为两个部分,一个是数据堆,一个是栈。程序在运行的时候一般分配数据堆,把局部的临时的变量都放进去,生命周期和进程有关系。但是如果程序员声明了static的变量,就直接在栈中运行的,进程销毁了,不一定会销毁static变量。   另外为了保证j ...
         Windows是一个消息(Message)驱动系统。Windows的消息提供了应用程序之间、应用程序与Windows系统之间进行通信的手段。应用程序想要实现的功能由消息来触发,并且靠对消息的响应和处理来完成。       Windows系统 ...
Visual C++作为一种程序设计语言,它同时也是一个集成开发工具,提供了软件代码自动生成和可视化的资源编辑功能。在使用Visual C++开发应用程序的过程中,系统为我们生成了大量的各种类型的文件,在本节中将要详细介绍Visual C++中这些不同类型的文件分别起到什么样的作用,在此基础上对Visual C++如何管理应用程序所用到的各种文件有一个全面的认识。*.dsw 为工作空间文件(Workspace)。*.dsp 为项目文件(Project)。一个工作空间文件中可以包含多个项目文件。*.cls 存放应用程序类和资源信息,这些信息是VC中的ClassWizard工具管理和使用类的信息来源 ...
dynamic_cast:   通常在基类和派生类之间转换时使用const_cast:   主要针对const和volatile的转换static_cast:   一般的转换(no run-time check)通常,如果你不知道该用哪个,就用这个。   reinterpret_cast:   用于进行没有任何关联之间的转换,比如一个字符指针转换为一个整形数。1)static_cast<T*>(a)编译器在编译期处理将地址a转换成类型T,T和a必须是指针、引用、算术类型或枚举类型。表达式static_cast<T*>(a), a的值转换为模板中指定的类型T。在运行时转换过 ...
一、描述内存描述方式以及它们的区别  1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。3) 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc 或new 申请任意多少的内存,程序员自己负责在何时用free 或delete 释放内存。动态内存的生存期由程序员决定,使用非常灵活,但问题也最多。   二、内存分配new/delete和malloc/free的区 ...
C++中用new动态创建二维数组的格式一般是这样: TYPE (*p)[N] = new TYPE [][N]; 其中,TYPE是某种类型,N是二维数组的列数。采用这种格式,列数必须指出,而行数无需指定。在这里,p的类型是TYPE*[N],即是指向一个有N列元素数组的指针。 还有一种方法,可以不指定数组的列数: int **p;p = new int*[10];    //注意,int*[10]表示一个有10个元素的指针数组for (int i = 0; i != 10; ++i){    p[i] = new int[5];} 这里是将p作为一个指向指针的指针,它指向一个包含10个元 ...
Global site tag (gtag.js) - Google Analytics