Cpp
文章平均质量分 75
wakeupwakeup
这个作者很懒,什么都没留下…
展开
-
【转载】C++文件操作详解(ifstrea…
C++ 通过以下几个类支持文件的输入输出:ofstream: 写操作(输出)的文件类 (由ostream引申而来)ifstream: 读操作(输入)的文件类(由istream引申而来)fstream: 可同时读写操作的文件类 (由iostream引申而来)打开文件(Open a file)对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来,也就是说打开原创 2016-01-14 09:08:24 · 654 阅读 · 0 评论 -
C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, intb);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而转载 2016-01-14 09:09:49 · 175 阅读 · 0 评论 -
C/C++内存对齐
一、什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只转载 2016-01-14 09:09:51 · 170 阅读 · 0 评论 -
C++判定大小端
在C/C++程序的编写中,当多个基本数据类型或复合数据结构要占用同一片内存时,我们要使用联合体;当多种类型,多个对象,多个事物只取其一时(我们姑且通俗地称其为“n选1”),我们也可以使用联合体来发挥其长处。首先看一段代码:union myun { struct { int x; int y; int z; }u; int k; }a; int main()转载 2016-01-14 09:09:54 · 557 阅读 · 0 评论 -
C语言scanf函数详细解释
函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]);scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘)读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。其调用格式为: scanf("",);scanf()函数返回成功赋值的数据项数,出错时则返回EOF转载 2016-01-14 09:10:19 · 387 阅读 · 0 评论 -
printf格式控制
printf的格式控制的完整格式:% - 0 m.n l或h 格式字符下面对组成格式说明的各项加以说明:①%:表示格式说明的起始符号,不可缺少。②-:有-表示左对齐输出,如省略表示右对齐输出。③0:有0表示指定空位填0,如省略表示指定空位不填。④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数(包括小数点)。N指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的转载 2016-01-14 09:10:34 · 391 阅读 · 0 评论 -
printf输出二进制
include#include#includevoid main(){ inti = 31; chars[10]; itoa(i,s,2); //转换成字符串,进制基数为2 printf("%s",s); //输出 getch();}转载 2016-01-14 09:10:37 · 5002 阅读 · 0 评论 -
如何正确地在MDK中使用关键…
笔者在做移植时,将Embest IDE环境下的例程移到REALVIEW MDK的过程中,曾经遇到这样一个问题:在生成工程时,编译全部通过,但在链接时提示许多符号未定义!如果读者也遇到过这个问题,请继续看下去,如果链接时提示未定义的变量是一些内联函数(即使用了关键字__inline)。那么就是笔者遇到的问题了。希望这篇文章对您有所帮助。在MDK中使用关键字__inline时,除了执行速度和占用空转载 2016-01-14 09:10:49 · 531 阅读 · 0 评论 -
c++编译器和连接器介绍
有些人写C/C++(以下假定为C++)程序,对unresolved external link或者duplicatedexternalsimbol的错误信息不知所措(因为这样的错误信息不能定位到某一行)。或者对语言的一些部分不知道为什么要(或者不要)这样那样设计。了解本文之后,或许会有一些答案。 首先看看我们是如何写一个程序的。如果你在使用某种IDE(Visual Studio,El转载 2016-01-14 09:10:59 · 845 阅读 · 0 评论 -
[原创]c++整型提升(类型转换)
有如下代码:signed short a = 1;signed short b = 0x7fff;signed short c = 0;if ( (a + b) {cout }else{cout }你觉得结果会是什么呢?刚开始我感觉 a + b结果应该是 signed short,那么就应该是-1,结果应该是溢出的。而实际运行却是输出no error。坑爹。原因如下:原创 2016-01-14 09:11:01 · 277 阅读 · 0 评论 -
do...while(0)的妙用
在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时,我们可能用for和while要多一些,do...while相对不受重视。 但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。1.do...while(0)消除goto语句。通常,如果在一个转载 2016-01-14 09:11:23 · 168 阅读 · 0 评论 -
c/c++优先级列表
C优先级列表PrecedenceOperatorDescriptionExampleAssociativity1()[]->.::++--Grouping operatorArray accessMember access from a pointerMember access from an objectScoping operatorPos转载 2016-01-14 09:09:46 · 251 阅读 · 0 评论 -
C/C++浮点数在内存中的存储…
任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为0000010010000100。则在Intel CPU架构的系统中,存放方式为 10000100(低地址单元)00000100(高地址单元),因为IntelCPU的架构是小端模式。但是对于浮点数在内存是如何存储的?目前所有的C/C++编译器都是采用IEEE所制定的标准浮点格式,即二进制科学表示法转载 2016-01-14 09:09:44 · 258 阅读 · 0 评论 -
explicit构造函数
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p ); // 用C风格的字符串p作为初始化值//…}String s1 = “hello”; //OK 隐式转换,等价于String s1 =String(“hello”); 但是有转载 2016-01-14 09:09:41 · 187 阅读 · 0 评论 -
【转载】VC中用内存映射文件处理大…
引言 文件操作是应用程序最为基本的功能之一,Win32API和MFC均提供有支持文件处理的函数和类,常用的有Win32API的CreateFile()、WriteFile()、ReadFile()和MFC提供的CFile类等。一般来说,以上这些函数可以满足大多数场合的要求,但是对于某些特殊应用领域所需要的动辄几十GB、几百GB、乃至几TB的海量存储,再以通常的文件处理方法进行处理显然是行不原创 2016-01-14 09:08:27 · 245 阅读 · 0 评论 -
【转载】对缓冲区的理解 C++
什么是缓冲区缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。为什么要引入缓冲区我们为什么要引入缓冲区呢?比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去原创 2016-01-14 09:08:29 · 265 阅读 · 0 评论 -
stringstream的用法
使用stringstream对象简化类型转换C++标准库中的提供了比ANSIC的更高级的一些功能,即单纯性、类型安全和可扩展性。在本文中,我将展示怎样使用这些库来实现安全和自动的类型转换。为什么要学习如果你已习惯了风格的转换,也许你首先会问:为什么要花额外的精力来学习基于的类型转换呢?也许对下面一个简单的例子的回顾能够说服你。假设你想用sprintf()函数将一个变量从int类型转换到字原创 2016-01-14 09:08:32 · 227 阅读 · 0 评论 -
pthread_join的使用方法[转]
pthread_join使一个线程等待另一个线程结束。代码中如果没有pthread_join主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了。加入pthread_join后,主线程会一直等待直到等待的线程结束自己才结束,使创建的线程有机会执行。所有线程都有一个线程号,也就是ThreadID。其类型为pthread_t。通过调用pthread_self()函数原创 2016-01-14 09:08:37 · 590 阅读 · 0 评论 -
内联函数,构造函数,静态函…
inline, static, constructor三种函数都不能带有virtual关键字。inline是编译时展开,必须有实体;static属于class自己的,也必须有实体;virtual函数基于vtable(内存空间),constructor函数如果是virtual的,调用时也需要根据vtable寻找,但是constructor是virtual的情况下是找不到的,因为const转载 2016-01-14 09:09:22 · 347 阅读 · 0 评论 -
C++五大内存分区及区别
一、五大内存分区 在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程转载 2016-01-14 09:09:25 · 457 阅读 · 0 评论 -
C++虚函数表解析
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的转载 2016-01-14 09:09:28 · 189 阅读 · 0 评论 -
C++覆盖重载隐藏问题
“overload”翻译过来就是:超载,过载,重载,超出标准负荷;“override”翻译过来是:重置,覆盖,使原来的失去效果。 先来说说重载的含义,在日常生活中我们经常要清洗一些东西,比如洗车、洗衣服。尽管我们说话的时候并没有明确地说用洗车的方式来洗车,或者用洗衣服的方式来洗一件衣服,但是谁也不会用洗衣服的方式来洗一辆车,否则等洗完时车早就散架了。我们并不要那么明确地指出来就心知肚明,这就转载 2016-01-14 09:09:30 · 177 阅读 · 0 评论 -
虚析构函数的使用
一、当你的类准备给别人继承时要提供虚析构函数考虑下面例子:class A{public: A(){cout ~A(){cout };class B : public A{public: B() { cout m_p = new char[10]; } ~B() { cout 转载 2016-01-14 09:09:33 · 255 阅读 · 0 评论 -
堆排序建堆复杂度为O(n)的证…
今天重温堆排序,在网上搜了好多博客文章,都是泛泛而谈。有的只讲了思路,有的直接贴上一份或几份代码。好一点的对复杂度进行了分析,但是讲到建堆复杂度,就一笔带过或者说请参考算法导论××页。我觉得求建堆复杂度并不难,了解一下对于理解堆排序是有好处的,下文为求解过程。 堆排序就是借助于堆的数据结构和堆的操作函数来完成排序功能的过程。堆的数据结构可以借助于数组表示出来并可以高效地进行堆的操作。我们为转载 2016-01-14 09:09:38 · 440 阅读 · 0 评论 -
最大堆/最小堆
(二叉)堆数据结构是一种数组对象,它可以被视为一棵完全二叉树,树中每个结点与数组中存放该结点值的那个元素对应。树的每一层都是填满的,最后一层可能除外(最后一层从一个结点的左子树开始填)。数组A具有两个属性:A.length是数组中的元素个数,A.heapsize是存放在A中的堆的元素个数。树的根为A[1],由某个结点的下标i,可以简单地计算出其双亲结点及子结点: Parent(i) {转载 2016-01-14 09:09:36 · 347 阅读 · 0 评论