
基础知识
文章平均质量分 70
seadplus
这个作者很懒,什么都没留下…
展开
-
浮点数的比较
在数学运算当中经常会涉及到判断两个数是否相等的情况对于整数很好处理 A==B这样的一个语句就可以解决全部的问题但是对于浮点数是不同的首先,浮点数在计算机当中的二进制表达方式就决定了大多数浮点数都是无法精确的表达的现在的计算机大部分都是数字计算机,不是模拟机,数字机的离散化的数据表示方法自然无法精确表达大部分的数据量的。其次计算机浮点数的精度在单精度float类型下,原创 2013-08-01 20:10:07 · 912 阅读 · 0 评论 -
头文件与之实现文件的的关系~
今天在网上看到一篇解释.h与.c(.cpp)的文章,我读完后感到有些地方不妥,特此按照我的理解,给初学者一些指导~说几句题外话,刚才让女朋友陪我出去一会,她说她要先化化妆,我随口就来--简单就是美丽啊!你猜她说什么:美丽除了天生丽质外,保养也是很重要的~ 我倒~你理解简单的含义吗?关于两者以前的关系,要从N年以前说起了~ long long ago,once aupon a tim转载 2012-09-28 13:30:12 · 1477 阅读 · 0 评论 -
C/C++运算符优先级
C语言中的运算符说明运算符结合性初等运算符() [] -> . ->单目运算符! ~ ++ -- - (类型) * & sizeof算术运算符* / %->算术运算符+ -->移位运算符>->关系运算符> >= ->关系运算符== !=原创 2012-09-28 14:46:26 · 948 阅读 · 0 评论 -
typedef中的指针
关于typedef和define在程序运行中的作用。例:#define a inttypedef int a;define是展开,纯展开。不是调用。如例,int就像一只悬挂在a上面的一块石头,就随时准备着,你说需要的时候,它就“啪”的一声掉下来,把原本定义的名字砸在下面。展现出原本的自己。别的它不管不问了,融入代码的海洋中了。(所以切记int原创 2012-09-27 01:21:19 · 606 阅读 · 0 评论 -
C语言中sizeof与strlen区别
一.本质区别sizeof和strlen有本质上的区别。sizeof是C语言的一种单目运算符,如++、--等,并不是函数,sizeof的优先级为2级,比/、% 等3级运算符优先级高,sizeof以字节的形式给出操作数的存储空间的大小。而strlen是一个函数,是由C语言的标准库提供的。strlen计算的 是字符串的长度。二.使用区别1.sizeofsizeof的操作数可以是数据类型、原创 2012-09-26 17:50:28 · 1059 阅读 · 0 评论 -
C++ 虚析构函数
类型需要虚析构函数的另外一个特征 是该类型具有指针成员或引用成员。如果有指针成员和引用成员,则该类型通常需要实现析构函数以及拷贝操作。通常,一个实现了析构函数的类型同时也需要实现拷贝构造函数与拷贝复制函数。作为一个经验法则:如果你有一个带有虚函数功能的类,则它需要一个虚析构函数,原因如下:1. 如果一个类有虚函数功能,它经常作为一个基类使用。2.如果它是一个基类,它的派生类经常转载 2012-09-08 10:50:04 · 498 阅读 · 0 评论 -
C++ system函数用法
int system( const char *command ); int _wsystem( const wchar_t *command ); command: Command to be executed sample: //system.c #include void main( void ) { system( "typ原创 2012-08-28 22:24:01 · 9610 阅读 · 0 评论 -
C/C++中枚举类型(enum)的使用解惑
枚举类型,顾名思义,“枚”作为量词,作“个”讲,那么枚举,就是一个一个的列举,如果一件事情能够被一个一个的列举,那么它的数量肯定就是有限的,否则是不能被一一列举出来的。所以枚举类型即为能被列举的常量的一个集合。在 生活中,枚举的例子随处可见,比如礼拜几,那么就可以作为一个枚举变量。这个变量所存储的值,是有限的,且,能被我们所列举。再比较说,性别。它也可以作 为一个枚举类型,我们知道,性别也就只转载 2012-08-30 09:46:18 · 1397 阅读 · 0 评论 -
内部连接和外部连接
在说内部连接与外部连接前,先说明一些概念。 1.声明 一个声明将一个名称引入一个 作用域; 在c++中,在一个作用域中重复一个声明是合法的 以下都是声明: int foo(int,int); //函数前置声明 typedef int Int; //typedef 声明 class bar; //类前置声明 extern转载 2012-08-29 10:09:32 · 769 阅读 · 0 评论 -
cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)转载请保留作者信息;1、cin1、cin.get()2、cin.getline()3、getline()4、gets()5、getchar()1、cin>> 用法1:最基本,也是最常转载 2012-08-29 09:32:33 · 701 阅读 · 0 评论 -
C++中文件流(fstream)的使用方法及示例
C++文件流:fstream // 文件流ifstream // 输入文件流ofstream // 输出文件流 #include //创建一个文本文件并写入信息//同向屏幕上输出信息一样将信息输出至文件#include#includevoid main(){ofstream ofs("C:\\example.txt")转载 2012-07-30 15:48:14 · 79047 阅读 · 0 评论 -
关于C++中模板中的typename和class的区别比较
问题:在下面的 template declarations(模板声明)中 class 和 typename 有什么不同?template class Widget; // uses "class"template class Widget; // uses "typename" 答案:没什么不同。在声明一个 template type parameter(模板类型参数)的时候,原创 2012-09-11 23:54:38 · 809 阅读 · 0 评论 -
C++编程对缓冲区的理解
转载自:http://developer.51cto.com/art/201107/277186.htm一、什么是缓冲区缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。二、为什么要引入缓冲区我们为什么要转载 2012-09-28 21:19:51 · 779 阅读 · 0 评论 -
C++静态(static)成员 静态(static)成员函数总结
类中的静态成员真是个让人爱恨交加的特性。我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动。 静态类成员包括静态数据成员和静态函数成员两部分。 一 静态数据成员: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时转载 2012-11-08 01:07:49 · 764 阅读 · 0 评论 -
揭露谭浩强的错误-证实不能用字符指针变量做形参
谭浩强 《C程序设计第三版》 第255页 例10.19 有如下程序:功能是将a字符串复制到b,并输出两个字符串。#include#includevoid copy_string(char *from,char *to){ for(;*from!='\0';) *to++=*from++; *to='\0'; }int main()原创 2012-11-07 23:56:14 · 1637 阅读 · 1 评论 -
运算符重载
C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。 运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作转载 2012-10-27 13:39:49 · 545 阅读 · 0 评论 -
malloc/free与new/delete的区别
相同点:都可用于申请动态内存和释放内存不同点:(1)操作对象有所不同。malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符。对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不原创 2012-11-04 23:51:32 · 562 阅读 · 0 评论 -
C语言函数内部改变指针本身
今天发一个C语言基础的小知识点:C语言中函数参数传递方式只有一种:值传递。 可能大家在刚开始学习C的时候都被一些教材误导,认为C中有值传递和地址传递两种方式。其实只有值传递一种,无论函数以什么形式进行传递,其实传递的都只是参数的一份拷贝! 举个简单的例子,一个改变某个整型变量参数的函数int change_value(int *pChange, int val){原创 2012-10-25 23:11:44 · 1201 阅读 · 0 评论 -
常量引用
如果是对一个常量进行引用,则编译器首先建立一个临时变量,然后将该常量的值置入临时变量中,对该引用的操作就是对该临时变量的操作。对常量的引用可以用其它任何引用来初始化;但不能改变。关于引用的初始化有两点值得注意:(1)当初始化值是一个左值(可以取得地址)时,没有任何问题;(2)当初始化值不是一个左值时,则只能对一个constT&(常量引用)赋值。而且这个赋值是有一个过程的:首原创 2012-10-25 22:00:25 · 1361 阅读 · 0 评论 -
C++里的静态(static)成员函数(不能用const的原因+static在c++中的第五种含义)
C++里的静态成员函数(不能用const的原因+static在c++中的第五种含义)C++里的静态成员函数(不能用const的原因+static在c++中的第五种含义) ----自 core c++ static在c++中的第五种含义:用static修饰不访问非静态数据成员的类成员函数。这意味着一个静转载 2012-11-01 16:54:16 · 877 阅读 · 0 评论 -
指针和引用的区别总结
1.从现象上看:指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变2.从内存分配上看:程序为指针变量分配内存区域,而引用不分配内存区域3.从编译上看:程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变原创 2012-10-30 00:07:59 · 496 阅读 · 0 评论 -
C++虚函数表解析
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过转载 2012-10-04 23:54:02 · 559 阅读 · 0 评论 -
C++异常处理
异常:程序执行期间,可检测到的不正常情况。例如:0作除数;数组下标越界;打开不存在的文件;远程机器连接超时;malloc失败等等。程序的两种状态:正常状态和异常状态,发生不正常情况后,进入异常状态,从当前函数开始,按调用链的相反次序,查找处理该异常的程序片断。1.throw 表达式语义:用表达式的值生成一个对象(异常对象),程序进入异常状态。Terminate函数,终止原创 2012-09-14 18:07:21 · 663 阅读 · 0 评论 -
STL函数对象及函数对象适配器
一 函数对象Functor STL中提供了一元和二元函数的两种Functor,通过unary_function和binary_function提供了这两种不同参数数量的Functor的基本结构,在这两个类型中,分别内嵌定义一元和二元函数操作在模版推演的时候需要用到的typedef. //一元函数的定义为templatestruct unary_function {原创 2012-08-14 21:46:40 · 849 阅读 · 0 评论 -
C++primer 标准IO库
面向对象的标准库实际的程序不仅限于对控制窗口的IO,通常还需要读或写已命名的文件。此外,程序还应该能够方便地使用IO操作格式化内存中的数据,从而避免读写磁盘或其他设备的复杂性和运行代价。应用程序还需要支持宽字符语言的读写。从概念上看,无论是设备的类型还是字符的大小,都不影响需要执行的IO操作。要同时支持不同的设备和不同大小的字符流,标准库使用了继承来定义一组面向对象的类。一般而言,通过继承原创 2012-07-29 20:52:58 · 1536 阅读 · 2 评论 -
运算符重载 C++
C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。 运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作转载 2012-05-20 18:39:58 · 549 阅读 · 0 评论 -
priority_queue的用法
priority_queue调用 STL里面的 make_heap(), pop_heap(), push_heap() 算法实现,也算是堆的另外一种形式。先写一个用 STL 里面堆算法实现的与真正的STL里面的 priority_queue用法相似的priority_queue, 以加深对 priority_queue 的理解?#include转载 2012-06-01 19:30:09 · 592 阅读 · 0 评论 -
C++ iostream迭代器简介
标准库定义的迭代器有很多种,istream_iterator用于读取输入流, ostream_iterator用于写输出流。这些迭代器将它们所对应的流视为特定类型的元素序列。使用流迭代器时,可以用泛型算法从流对象读取数据(或将数据写到流对象)。这篇笔记主要是其定义和基本的使用:iostream迭代器的构造函数:1. istream_iterator in(strm);创建从输入流s转载 2012-05-29 16:41:05 · 1559 阅读 · 0 评论 -
C++ iostream 迭代器 STL
iostream迭代器iostream迭代器的构造函数istream_iterator in(strm); 创建从输入流strm中读取T类型对象的istream_iterator对象istream_iterator in; istream_iterator对象的超出末端迭代器ostream_iterator in(strm); 创建将T类型的对象写到输出流strm的ostre原创 2012-05-29 16:22:06 · 3804 阅读 · 0 评论 -
C语言指针详解
指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。 学习指针是学习C语言中最重要的一环, 能否正确理解和使用指针是我们是否掌握C语言的一个标志。同时, 指针也是C语言中最为困难的一部分,在学习中除了要正确理解基本概念,转载 2012-05-08 11:09:55 · 609 阅读 · 0 评论 -
指向结构体类型数据的指针
第六节 指向结构体类型数据的指针三、用指向结构体的指针作函数参数有时想将一个结构体变量的值传给另一个函数,但原来的C标准不允许用结构体变量作为函数参数。那么用什么方法来解决这个问题呢?有两个方法:①用结构体变量的成员作参数。例如,用stu[2].name作函数实参,将实参值传给形参。用法和用普通变量作实参是一样的,属“值传递”方式。 ②用指向结构体变量(或数组)的指针作实参,将转载 2012-05-08 09:59:35 · 1235 阅读 · 0 评论 -
C语言字符串常用函数总结
函数名: stpcpy功能:拷贝一个字符串到另一个用法:char *stpcpy(char *destin, char *source);程序例: #include #include int main(void){ char string[10]; char *str1 = "abcdefgh原创 2012-04-06 18:26:09 · 657 阅读 · 0 评论 -
大数阶乘
正常情况下阶乘指从1乘以2乘以3乘以4一直乘到所要求的数,即自然数n阶乘。下面使用int来计算阶乘结果,代码如下:int SmallFactorial(int number){ int sum = 1; for (int i = 1; i <= number; i++) { sum *= i; } return sum原创 2012-04-03 23:19:06 · 649 阅读 · 0 评论 -
公约数 公倍数问题
来自:http://blog.youkuaiyun.com/cauwtj/archive/2009/04/02/4043388.aspx更相减损术更相减损术,又称"等值算法"关于约分问题,实质是如何求分子,分母最大公约数的问题。《九章算术》中介绍了这个方法,叫做”更相减损术”,数学家刘徽对此法进行了明确的注解和说明,是一个实用的数学方法。例:今有九十一分之四十九,问约之得几何?我们用(转载 2012-04-03 19:22:46 · 901 阅读 · 0 评论 -
typedef用法小结
来源一:Using typedef to Curb Miscreant Code Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法。不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef 避免缺欠,从而使代码更健壮。 typedef 声明,简称 typedef,为现有类型创建一个新的名字。比如人们常常使转载 2012-03-27 17:08:52 · 729 阅读 · 0 评论 -
C++中数据类型
在C++中类型大致可以分为三种一、内置类型如int, char, float, unsigned等。内置类型是最基本的类型。二、复合类型复合类型:使用其它类型定义的类型。有三种复合类型:引用,指针,数组。三、类类型就是类。比如string以及其他自己定义的类。原创 2012-07-18 22:16:13 · 681 阅读 · 0 评论 -
vector.resize 与 vector.reserve的区别
reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用push_back()/insert()函数。resize是改变容器的大小,并且创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新的元素时,用operator[]操作符,或者用迭代器来引用元素对象。再者,两个函数的形式是有区别的,reserve函数之原创 2012-08-04 09:12:35 · 715 阅读 · 0 评论 -
C++ 智能指针
智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针。每次创建类的新对象时,初始化指针并将引用计数置为1;当对象作为另一对象的副本而创建时,拷贝构造函数拷原创 2012-08-13 00:12:25 · 620 阅读 · 0 评论 -
C++ 直接初始化和复制初始化
在C++里,对象初始化是一个非常重要但又容易令人混淆的问题。这里是自己的一些总结。一。初始化与赋值的含义:初始化:包括创建(或说定义)对象并且赋给初值。(如果一个对象只被创建而没有被初始化,则该变量只能用于被赋值)。赋值: 擦除对象的当前值并用新值代替。二。内置类型:(一)直接初始化:1.空初始化:即无参数无括号形式如int i,new int,new int[原创 2012-08-11 22:02:36 · 1144 阅读 · 0 评论 -
复制构造函数(拷贝构造函数)
也许很多C++的初学者都知道什么是构造函数,但是对复制构造函数(copy constructor)却还很陌生。对于我来说,在写代码的时候能用得上复制构造函数的机会并不多,不过这并不说明复制构造函数没什么用,其实复制构造函数能解决一些我们常常会忽略的问题。为了说明复制构造函数作用,我先说说我们在编程时会遇到的一些问题。对于C++中的函数,我们应该很熟悉了,因为平常经常使用;对于类的对象,我们也很转载 2012-08-11 21:36:36 · 961 阅读 · 0 评论