使用C/C++
Deutschester
初入职场的互联网新人,正在快速成长中……
展开
-
C++的输入输出流、文件操作
1. C++保留C的输入输出单个字符的函数 (1) putchar(c) —— 字符输出 例程:#include using namespace std; int main() { char a,b,c; a=B; b=O;c=Y; putchar(a); putchar(b); putchar(c);putchar(原创 2009-06-24 20:31:00 · 3680 阅读 · 1 评论 -
C/C++ 基础(持续更新中)
<br /> <br />在C++中,内存被分为五个块: 堆,栈,自由存储区,全局/静态变量区和常量存储区.<br />栈: 是编译器在需要的时候分配,在不需要的时候自动清除的一块区域.通常用来存储局部变量,形式参数.<br />堆: 一般是由new分配的区域,编译器不会去管这块存储区域,主要是由程序员控制,一个new对应一个delete.如果用new分配了一块内存而没有进行释放的话,只有等到进程结束的时候被系统自动收回.<br />自由存储区: 由malloc分配的区域,和堆十分相似,不同的地方是它的释原创 2010-06-03 02:18:00 · 615 阅读 · 0 评论 -
STL中的常用的vector,map,set,sort, list用法笔记
<br />原帖地址:http://hi.baidu.com/yanfei_1/blog/item/a0a538331f5256f91a4cffba.html<br />C++的标准模板库(Standard Template Library,简称STL)是一个容器和算法的类库。容器往往包含同一类型的数据。STL中比较常用的容器是vector,set和map,比较常用的算法有Sort等。<br />.<br />一. vector<br />1.声明:<br /> 一个vector类似于一个转载 2010-06-22 22:31:00 · 1500 阅读 · 0 评论 -
C:宏定义 zz
<br />使用宏时,用圆括号括住每个参数,并括住宏的整体定义;一般来说,在宏中不要使用自增或自减运算符。<br /><br /> <br />下面是一些常见的宏定义:<br /> <br />[1]最值<br />#define MIN(x, y) (((x) < (y)) ? (x) : (y))<br />求两者间的较小者<br />#define MAX(x, y) (((x) > (y)) ? (x) : (y))<br />求两者间的较大者<br />#define转载 2010-08-30 16:58:00 · 733 阅读 · 0 评论 -
memcopy和memmove 区别(另strcpy(), strncpy()和memset())
1.memmove函数原型:void *memmove(void *dest, const void *source, size_t count)返回值说明:返回指向dest的void *指针参数说明:dest,source分别为目标串和源串的首地址。count为要移动的字符的个数函数说明:memmove用于从source拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。 void *memmove(void *dest,转载 2010-08-31 11:37:00 · 4091 阅读 · 0 评论 -
C++虚函数表解释(zz)
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。当然转载 2010-08-30 14:44:00 · 750 阅读 · 0 评论 -
C/C++预处理过程与语句总结zz
<br />自: http://www.cnscn.org<br /> <br />1)预处理<br /> 根据已放置在文件中的预处理指令来修改源文件的内容<br /> 预处理器会分析/执行所有的预处理器指令,然后删除他们,得到一个仅包含C++语句的转换单元<br /> 预处理指令以#号开头<br /><br /><br /> 常用的预处理指令:<br /> #include 包含头文件<br /><br /> #if 条件<转载 2010-08-30 16:54:00 · 544 阅读 · 0 评论 -
auto、register、static、extern等存储类修饰符的区别 zz
<br />自: http://kimva.blogbus.com/logs/19329180.html<br /> <br /> <br />一、标识符的链接(linkage)<br />(1)外部链接<br /> 表示在整个程序中(多个程序文件)是相同的函数或对象。常见的有,在函数体外声明的extern变量。<br />(2)内部链接<br /> 表示只在当前程序文件中是相同的函数或对象。其它程序文件不能对其进行访问。常见的有,在函数体外声明的static变量。<br />转载 2010-08-30 17:01:00 · 933 阅读 · 0 评论 -
C++:虚函数与抽象类 zz
自:http://zhangjunhd.blog.51cto.com/113473/57543 1.虚函数1.1虚函数的作用虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。class Time{ public: Time(int=0,int=0,int=0); void show(); protected: int hour; int min; int sec;};转载 2010-08-30 16:19:00 · 713 阅读 · 0 评论 -
一些操作和C++语言本身的特性可能成为应用程序的瓶颈
<br />=====一般公认的有如下因素:<br /> <br />(1)缺页:缺页往往意味着需要访问外部存储。因为外部存储访问相对于访问内存或者代码执行,有数量级的差别。因此只要有可能,应该尽量想办法减少缺页。<br />(2)从堆中动态申请和释放内存:如C语言中的malloc/free和C++语言中的new/delete操作非常耗时,因此要尽可能优先考虑从线程栈中获得内存。优先考虑栈而减少从动态堆中申请内存,不仅仅是因为在堆中开辟内存比在栈中要慢很多,而且还与"尽量减少缺页"这一宗旨有关。当执行程序时原创 2010-10-12 00:53:00 · 1001 阅读 · 0 评论 -
宏定义技巧
宏定义是C提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。 预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。掌握"宏"概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。 即在对相关命令或语句的含义和功能作具体分析之前就要换=======================================转载 2011-10-28 21:03:12 · 804 阅读 · 0 评论 -
可变参数宏
转自:http://www.upsdn.net/html/2006-08/692.html =============================================================================================================================在 GNU C 中,宏可以接受可变数目的参数,转载 2011-11-01 15:28:16 · 663 阅读 · 0 评论 -
C语言编译全过程
编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。 编译的完整过程:C源程序-->预编译处理(.c)-->编译、优化程序(.s、.asm)-->汇编程序(.obj、.o、.a、.ko)-->链接程序(.exe、.elf、.axf等)1.转载 2011-11-03 20:12:30 · 2033 阅读 · 0 评论 -
透析回调函数
“先泛后精,先浅后深”的道理可是知易行难,所以常常会给技术上的小细节纠缠着,搞得晕晕乎,其中“回调函数”就是其中之一了,虽然回用,但是老是不明白其中的含义,众多的书本也说得隐晦不清。直到不久前看到一篇文章才总算比较清晰了解, 。 概括起来,回调机制包括两部分:服务执行者和服务方式制定者。 1. 服务执行者先制定服务规范; 2.转载 2011-11-03 20:10:40 · 624 阅读 · 0 评论 -
C/C++中的输入输出
<br />1.scanf与getchar<br />一般情况下,比如在没有格式控制符的情况下,scanf是不能清除缓冲区的内容也就是说当遇到Enter,Space,Tab键结束的时候,这3个键会放到缓冲区中。<br />同样,getchar也不能吃掉缓冲区中的内容,但是一般在有些程序用getchar做读入字符来暂停程序,不过如果之前缓冲区中有其他内容的话,会被getchar()读进去,可以用fflush(stdin)来清除缓冲区中的内容(这个自己还没试过)。同样getchar是以Enter作为结束符的,它转载 2010-06-03 02:01:00 · 1220 阅读 · 0 评论 -
main函数的参数
<br /><br />C编译器允许main()函数没有参数,或者有两个参数(有些实现允许更多的参数,但这只是对标准的扩展)。这两个参数,一个是int类型,一个是字符串类型。第一个参数是命令行中的字符串数。按照惯例(但不是必须的),这个int参数被称为argc(argumentcount)。大家或许现在才明白这个形参为什么要取这么个奇怪的名字吧,呵呵!至于英文的意思,自己查字典吧。第二个参数是一个指向字符串的指针数组。命令行中的每个字符串被存储到内存中,并且分配一个指针指向它。按照惯例,这个原创 2010-07-20 16:00:00 · 1039 阅读 · 0 评论 -
关于new 、delete、及应用的使用
C中使用malloc()、free()在自由空间中分配存储空间,C++中使用new 和 delete new有3种形式 int *p=new int; int *p=new int(10); int *p=new int[20];delete有2种形式 delete p; delete [] p; new表达式返回指向新创建对象的指原创 2009-06-25 16:33:00 · 892 阅读 · 0 评论 -
C++中const用法总结
来自http://www.cppblog.com/jukevin/archive/2008/12/27/70499.html 1. const修饰普通变量和指针const修饰变量,一般有两种写法: const TYPE value; TYPE const value; 这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。 对转载 2009-06-27 22:31:00 · 505 阅读 · 0 评论 -
C++ 常考笔试题汇总
来自 http://www.sf.org.cn/blog/dongfengsun/200805/21023.html①链表反转单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题。比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当转载 2009-07-08 17:58:00 · 1405 阅读 · 0 评论 -
学习 C++ 的50条建议
1. 把C++当成一门新的语言学习(和C没啥关系!真的。) 2. 看《Thinking In C++》,不要看《C++变成死相》 3. 看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看 4. 不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开转载 2009-07-09 10:50:00 · 546 阅读 · 0 评论 -
C:文件操作-读写字符与读写行(!!!好)
来自:http://zhangjunhd.blog.51cto.com/113473/100299 1.读写字符函数putc()与getc()这两个函数类似于putchar()与getchar()函数。假设fp是一个FILE指针,ch是一个字符变量,ch = getc(fp);// ch = getchar();putc(ch,fp);// putchar(ch);转载 2010-01-14 23:29:00 · 1407 阅读 · 0 评论 -
动态分配二维数组
1. C语言动态分配二维数组(1)已知第二维Code-1char (*a)[N];//指向数组的指针a = (char (*)[N])malloc(sizeof(char *) * m);printf("%d/n", sizeof(a));//4,指针printf("%d/n", sizeof(a[0]));//N,一维数组free(a);(2)已知原创 2010-01-12 14:22:00 · 676 阅读 · 0 评论 -
删除文件中的注释部分代码。。。
#include #include #include using namespace std;int main(int argc, char **argv){ char buffer[256]; if(argc!=2) { cout " exit(1); } //生成ifstream的对象并打开文件 if转载 2010-01-13 10:25:00 · 886 阅读 · 0 评论 -
二维数组的动态分配及参数传递
1. C语言动态分配二维数组(1)已知第二维Code-1char (*a)[N];//指向数组的指针a = (char (*)[N])malloc(sizeof(char *) * m);printf("%d/n", sizeof(a));//4,指针printf("%d/n", sizeof(a[0]));//N,一维数组free(a);(2)已知转载 2010-01-07 08:30:00 · 624 阅读 · 0 评论 -
字符频率统计(二叉树和普通方法)
(一)二叉树方法:#include #include #include #define maxword 100typedef struct tnode{ char ch; int count; struct tnode *lchild,*rchild;}BTree; void CreaTree(BTree* &p,char c){ if(p==NULL) { p = (BTr原创 2010-01-06 11:15:00 · 1703 阅读 · 0 评论 -
将一个整数N转换成字符串!(递归和非递归、及——进制转化)
一、递归(1)=====#include #include using namespace std; string DecToStr(unsigned n) { return n > 0 ? DecToStr(n/10) + static_cast(n%10 + 0) : ""; } int main() { long n=12345608; cout retur原创 2010-01-13 10:51:00 · 3280 阅读 · 0 评论 -
C中读文件
来自:http://blogger.org.cn/blog/more.asp?name=binaryluo&id=11408 C文件操作遇到的状况1.将一个文件读到另一个文件,用“(ch = getc(fp)) != EOF”来判断文件是否结束,如果文件是全英文文本的话绝对没问题,新文件的大小和原文件大小一样;但是如果是一些有中文字符或者是二进制文件,原文件没读完就结束。2.将一个文件读到转载 2010-01-14 23:14:00 · 4956 阅读 · 1 评论 -
fgetc()/fputc()/fgets()/fputs()/fread()/fwrite()/fopen()/fclose() 等C语言文件操作函数
fgets(由文件中读取一字符串) 相关函数 open,fread,fscanf,getc表头文件 include定义函数 char * fgets(char * s,int size,FILE * stream);函数说明 fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串转载 2010-01-14 23:20:00 · 3708 阅读 · 0 评论 -
面向对象编程(待续)
1.对面向对象和面向过程两种编程风格的评述 在进行面向过程的程序设计时,一般首先考虑程序所要实现的功能,然后设计为实现这些功能所必须采取的步骤,这些步骤就是过程。如果一个过程比较复杂而不能直接使用已有的抽象进行实现,则对这个过程进行分解,使分解之后的每一步(更低级的过程)能够直接对应着一条语句。通过将分解之后的一系列过程封装在一个函数抽象中,程序员在特定的时刻只关心有限的细节,这个新的函数转载 2010-01-15 14:44:00 · 645 阅读 · 0 评论 -
位操作技巧实例大全
检测一个无符号数是不为2^n-1(^为幂): x&(x+1) 将最右侧0位改为1位: x | (x+1)二进制补码运算公式:-x = ~x + 1 = ~(x-1)~x = -x-1 -(~x) = x+1~(-x) = x-1x+y = x - ~y - 1 = (x|y)+(x&y) x-y = x + ~y + 1 = (x|~y)-(~x&y) x^y转载 2011-11-03 20:19:19 · 1032 阅读 · 0 评论