c/c++编程语言
文章平均质量分 60
cai0538
这个作者很懒,什么都没留下…
展开
-
单链表逆置代码实现
void ListReverse(LinkList &L){if(!L)return;if(L->next==NULL)return;LNode* p=L;LNode* q=p->next;LNode* r=q->next;p->next=NULL;q->next=p;while(r){p=q;q=r;r=r->next;q->next=p;原创 2012-03-22 15:23:34 · 993 阅读 · 0 评论 -
C++中const用法总结
1. const常量,如const int max = 100; 优点:const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误。2. const 修饰类的数据成员。转载 2011-12-06 17:12:37 · 1769 阅读 · 0 评论 -
Effective c++之构造函数、析构函数和assignment运算符【二】
条款14:总是将base class拥有virtual destructor条款15:令operator=传回“*this的reference”条款16:在operator=中为所有的data members设定(赋值)内容条款17:在operator=中检查是否“自己赋值给自己”以上条款与2011年11月14日22:09改为已读!原创 2011-11-14 22:07:15 · 387 阅读 · 0 评论 -
c++常量成员函数详解
/************************************************* * 常量成员函数的含义(成员函数 + const) * * 在类的 非 常量成员函数中,this指针类型是 X *const(指 * 针常量),而在 常量成员函数中,this指针类型是const X *const *转载 2011-12-04 17:05:40 · 4259 阅读 · 0 评论 -
类模板的定义和实例化
先看下面利用类模板的一个实例程序:#include using namespace std;template class Test{public: Test(T a,T b){ x=a; y=b; } T getMin(){ return x<y?x:y; } void show(){ cout<<"x="<<x<<'\t'<<"y="<<y<<endl; }原创 2011-11-11 19:35:13 · 2666 阅读 · 0 评论 -
复制构造函数(拷贝构造函数)与赋值函数的区别
复制构造函数和赋值构造函数主要有以下两个区别:1)复制构造是一个对象初始化一块内存区域,这块内存就是新对象的内存区;例如:class A;A a;A b=a;//复制构造函数调用A b(a);//复制构造函数调用而赋值构造函数是对于一个已经被初始化的对象来进行赋值操作,例如:class A;A a;A b;a=b;//赋值函数调用2)实现不一样。复制原创 2011-11-11 11:46:40 · 737 阅读 · 0 评论 -
WINDOWS内核对象
WINDOWS内核对象 一.前言 Windows中有很多像进程对象、线程对象、文件对象等等这样的对象,我们称之为Windows内核对象。内核对象是系统地址空间中的一个内存块,由系统创建并维护。内核对象为内核所拥有,而不为进程所拥有,所以不同进程可以访问同一个内核对象。 二.内核对象结构 每个对象都有对象头和对象体组成。所有类型的对象头结构都是相同的,而结构体部转载 2011-11-10 17:09:47 · 550 阅读 · 0 评论 -
Trie树|字典树的简介
Trie树|字典树的简介Trie,又称字典树、单词查找树,是一种树形结构,用于保存大量的字符串,其核心思想是空间换时间。它的优点是:利用字符串的公共前缀来节约存储空间。相对来说,Trie树是一种比较简单的数据结构.理解起来比较简单,正所谓简单的东西也得付出代价.故Trie树也有它的缺点,Trie树的内存消耗非常大.当然,或许用左儿子右兄弟的方法建树的话,可能会好点.转载 2011-11-10 15:51:19 · 820 阅读 · 0 评论 -
阿里巴巴2012校园招聘笔试题【转自网络】
1、有一个虚拟存储系统,若进程在内存中占3页(开始时内存为空),若采用先进先出(FIFO)页面淘汰算法,当执行如下访问页号序列后1,2,3,4,5,1,2,5,1,2,3,4,5,会发生多少缺页?A、7 B、8 C、9 D、102、设有一个顺转载 2011-11-07 21:05:46 · 9478 阅读 · 7 评论 -
做几个笔试题【一】
1、C ++为什么经常将析构函数声明为虚函数?简单的说就是在实现多态时,如定义了一个指向派生类的基类指针,当delete该基类指针时,如果不将基类的析构函数声明为虚,只会调用基类的析构函数,而不会调用派生类的析构函数,为了保证同时调用派生类的析构函数,需要将析构函数声明为虚。 2、inline和#define的如何定义MAX,区别是什么。template inline T MAX原创 2011-12-06 17:10:45 · 1321 阅读 · 0 评论 -
C++中的单冒号与双冒号
1.单冒号(:)用法 (1)表示机构内位域的定义(即该变量占几个bit空间) typedef struct _XXX{ unsigned char a:4; unsigned char c; } ; XXX (2)构造函数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型原创 2011-12-06 16:33:51 · 3861 阅读 · 0 评论 -
求字符串中子串出现的次数(c++实现)
题目如题目所示。代码如下:int findSubStringNUM(const char* targetString,const char* subString){ assert(NULL!=targetString||NULL!=subString); int i=0; int j=0; int num=0; while(targetString[i]!='\0'){ if(s原创 2011-12-08 16:12:07 · 6883 阅读 · 1 评论 -
Linux中创建静态库和动态库
一、基本概念1.1什么是库在windows平台和linux平台下都大量存在着库。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的平台不同(主要是编译器、汇编器和连接器的不同),因此二者库的二进制是不兼容的。本文仅限于介绍linux下的库。 1.2库的种类linux下的库有原创 2012-03-04 14:11:06 · 704 阅读 · 0 评论 -
make工具介绍
2.3 make工具及makefile文件无论是在Linux还是在UNIX环境中,make都是一个非常重要的编译工具。无论是自己进行项目开发还是安装应用软件,都需要使用make工具。利用make工具,可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序而言,使用make工具和makefile文件就可以清晰地理顺各个源文件之间的关系。而且如此多的源文件,如果每原创 2012-03-04 17:09:34 · 2680 阅读 · 1 评论 -
linux多线程编程介绍
linux多线程编程介绍一、多线程定义多线程一词可以解释为多个控制线程或多个控制流。虽然传统的UNIX 进程包含单个控制线程,但多线程(multithreading, MT) 会将一个进程分成许多执行线程,其中每个线程都可独立运行。二、使用多线程的理由 使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式。我们知道,在Linux系统下,启动一个新的原创 2012-01-09 17:13:12 · 2155 阅读 · 1 评论 -
函数重载/重写/重定义(覆盖)
1. 重载 (overload): 指函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。函数重载存在于同一个类的定义中。2. 重写 (override): 父类与子类之间的多态性。子类重新定义父类中有相同名称和参数的虚函数。1) 被重写的函数不能是 static 的。必须是 virtual 的 ( 即函数在最原始的基类中被声明为 vi原创 2012-01-08 17:42:31 · 2790 阅读 · 0 评论 -
printf格式控制符
一、完整格式% - 0 m.n l或h 格式字符①%:表示格式说明的起始符号,不可缺少。②-:有-表示左对齐输出,如省略表示右对齐输出。③0:有0表示指定空位填0,如省略表示指定空位不填。④m.n:m指域宽,若数据的位数小于m,则左端补空格,若大于m,则按实际位数输出。 n指精度,用于说明输出的实型数的小数位数。未指定n时,隐含的精度为n=转载 2012-01-07 17:29:38 · 1587 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事原创 2012-01-08 21:36:55 · 715 阅读 · 0 评论 -
小端法与大端法及验证机器小端还是大端的验证程序
首先请看定义:a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。举例说明:假设变量x类型为int,位于地址0x100处,x的十六进制表示形式为0x01234567。地址范围0x100~0x103。则该变量在不同机器内存中的分布如下图所示:原创 2012-01-08 19:47:12 · 3428 阅读 · 0 评论 -
k-means(k均值聚类)算法介绍及实现(c++)
基本介绍:k-means 算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。工作过程: k-means 算法的工作过程说明如下:首先从n个数据对象任意选择 k 个对象作为初始聚类中心;而对于所剩下其它对原创 2011-12-11 21:49:06 · 39763 阅读 · 12 评论 -
C++虚函数表解析【二】
接c++虚函数表解析【一】如果一个类没有继承关系,且该类中定义了虚函数,那么这个类的实例只有一张虚函数表,如【一】所说明;对于一个单继承的类,即派生类的基类只有一个,如果它有虚函数,也只有一张虚函数表。但是,对于多重继承的类,它可能会有多张虚函数表。下面一一具体说明:还是以代码为例,看下面代码:class Base1{ public: Base1(原创 2011-11-06 23:25:21 · 987 阅读 · 0 评论 -
C++虚函数表解析【一】
虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。在这个表中,主要是一个类的虚函数的地址,这张表解决了继承、覆盖的问题,其内容真实反映了实际函数。这样,在有虚函数的类的实例中虚函数表被分配在实例的内存中,所以,当用父类的指针从操作一个子类的时候,这张虚函数表就显得尤为重要了,它就像一张地图,指明了实际所应该调用的函数。在C++的标准规格说明书中原创 2011-11-04 22:43:26 · 729 阅读 · 0 评论 -
关于volatile关键字
volatie是易变的、不稳定的意思。很多人根本就没见过这个关键字,不知道它的存在。也有很多程序员知道它的存在,但从来没用过它。volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。先看下面的例子:int i=1原创 2011-11-01 23:01:08 · 420 阅读 · 0 评论 -
Effective c++之构造函数、析构函数和assignment运算符【一】
条款11:如果class内动态配置有内存,请为此class声明一个copy constructor和一个assignment运算符。条款12:在constructor中尽量以initialization动作取代assignment动作。条款13:initialization list中的members初始化次序应该和其他class内的声明次序相同。以上条款在2011年11月14日11:原创 2011-11-14 11:13:27 · 443 阅读 · 0 评论 -
new和malloc的区别
1、new 是c++中的操作符,malloc是c 中的一个函数2、new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数3、内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那一行,而malloc没有这些信息。4、new 和转载 2011-10-26 11:36:54 · 520 阅读 · 0 评论 -
2012校园招聘的一道笔试题目
#include using namespace std; struct Foo{ Foo() {} Foo(int) {} void fun() {} }; int main() { Foo a(10);//语句1 a.fun();//语句2 Foo b();//语句3 b.fun();//语句4 return 0; } A:语句原创 2011-11-14 11:42:42 · 624 阅读 · 0 评论 -
关于程序在内存中的分布
在现代的操作系统中,当我们说到内存,往往需要分两部分来讲:物理内存和虚拟内存。从硬件上讲,虚拟空间是CPU内部的寻址空间,位于MMU之前,物理空间是总线上的寻址空间,是经过MMU转换之后的空间。一般我们所说的程序在内存中的分布指的就是程序在虚拟内存中的存储方式。从转载 2011-10-08 22:40:13 · 615 阅读 · 0 评论 -
自增自减运算符,左值右值
前置运算符和后置运算符,左值和右值。其实很久以来一直都没有怎么搞清楚左值和右值的区别,只知道左值可以放在等号的左边,也可以放在等号的右边,但是右值却只能放在等号的右边,然后形成一个大概直观的印象,知道怎么样做才不出错而已。不过今天看看C++,却发现有了点新的体会。对于表达转载 2011-10-13 22:25:31 · 4283 阅读 · 2 评论 -
字符串操作函数的实现【笔试面试经常考的,这里都有了】
像strcpy,strcat,strstr等等字符串操作函数的源码实现是找工作的过程中笔试面试经常考的,此处个人收录了linux中字符串操作函数的实现,希望对大家有帮助1. /*2. * linux/lib/string.c3. *4. * Copyright (原创 2011-10-11 19:42:56 · 1922 阅读 · 0 评论 -
局部变量、全局变量、堆、堆栈、静态和全局
<br />局部变量、全局变量、堆、堆栈、静态和全局<br />--------------------------------------------------------------- <br />一般全局变量存放在数据区,局部变量存放在栈区, <br />动态变量存放在堆区,函数代码放在代码区。 <br />--------------------------------------------------------------- <br />栈区是普通的栈数据结构,遵循LIFO后进先出的规则,局原创 2011-03-25 16:39:00 · 864 阅读 · 0 评论 -
关于引用类型
<br />一直以来,自己仅仅是知道引用的存在,却没有在实际的编码中亲自操刀用过,利用此机会小学习总结下:<br />定义一个引用类型变量的一般格式为:<br /><类型>&<引用变量名>=<变量名><br />举例:int a; int &aa=a;<br />一、什么是“引用”?声明和使用“引用”要注意哪些问题?<br />答:引用就是某个目标变量的“别名”(alias),对其应用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行初始化。引用声明完毕后,相当于目标变量名有两个名称,即原创 2010-06-17 11:27:00 · 884 阅读 · 0 评论 -
孤儿进程与僵尸进程【一】
在UNIX 系统中,一个子进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么这个子进程将变成一个僵尸进程。 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程, 因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程, 看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init (进程号为1)来接管他,成为他的父进程,此时称这个进原创 2011-11-15 17:31:07 · 620 阅读 · 0 评论 -
malloc、calloc、realloc、alloca几个内存分配函数的区别
四个个函数的声明分别是:void* realloc(void* ptr, unsigned newsize);void* malloc(unsigned size);void* calloc(size_t nelem, size_t elsize); void *alloca (size_t __size); //从栈中申请空间它们的返回值都是请求系统分配的地址,如果原创 2011-10-26 16:11:39 · 1079 阅读 · 0 评论 -
孤儿进程与僵尸进程【二】
在UNIX 系统中,一个子进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么这个子进程将变成一个僵尸进程。 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程, 因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程, 看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init (进程号为1)来接管他,成为他的父进程,此时称这个进原创 2011-11-15 17:42:28 · 614 阅读 · 0 评论 -
关于assert
assert宏的原型定义在assert.h中,其作用是如果它的条件返回错误,则终止程序执行. 原型定义: 1#include "assert.h"2void assert( int expression ); assert的作用是现计算表达式 exp原创 2011-11-01 23:19:11 · 395 阅读 · 0 评论 -
求二叉树中节点间的最大距离(c++代码完整实现)
//求一个二叉树中节点间的最大距离,//两个节点的距离定义是这两个节点间的边的个数//比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间复杂度 #include #include #define OVERFLOW -2using namespace std;// 数据结构定义struct NODE{ NODE* pLeft; /原创 2011-09-07 16:06:28 · 1564 阅读 · 0 评论 -
亚信联创2012校园招聘笔试题【转自网络】
1、对于如下程序:view plain#include using namespace std; class A { public: A() { cout"A" } }; int main(void) { A a[4], b,*p;转载 2011-11-01 16:20:52 · 1460 阅读 · 0 评论 -
C++ 虚函数表解析
C++ 虚函数表解析 陈皓http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,R转载 2011-11-01 16:16:17 · 422 阅读 · 0 评论 -
c与c++中的文件操作【二】
c++在头文件fstream.h中定义了c++得文件流类体系,其体系结构图如下如所示:其中ofstream类实现数据写入到文件中的各种操作。程序举例1:将数组中的数据写入到指定的文本文件中,代码如下:代码待补充ifstream实现从文件中读数据的各种操作。程序举例:将文本文件中的数据读入到数组中,代码如下:代码待补充原创 2011-11-20 16:30:36 · 488 阅读 · 0 评论 -
原码、反码及补码
在计算机内,定点数有3种表示法:原码、反码和补码所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。 反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。1、原码、反码和补码的表示方法(1) 原码:在数值转载 2011-11-18 23:03:45 · 647 阅读 · 0 评论