
C/C++/VC
文章平均质量分 68
sayigood
小胜靠智,大胜靠德!
展开
-
判断单链表是否存在环,判断两个链表是否相交问题详解(转载)
摘要】有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。1、如何判断一个链表是不是这类链表?2、如果链表为存在环,如果找到环的入口点?扩展:判断两个单链表是否相交,如果相交,给出相交的第一个点。有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。问题:1、如何判转载 2009-02-15 09:46:00 · 2389 阅读 · 0 评论 -
关于函数fread
•函数名: fread功 能: 从一个流中读数据 用 法: int fread(void *ptr, int size, int nitems, FILE *stream); 程序例: #include #include int main(void) { FILE *stream; char msg[] = "this is a test";原创 2009-03-29 22:02:00 · 841 阅读 · 0 评论 -
Efficient C++笔记(一)
第一章 跟踪范例 在运行跟踪范例Trace的过程中,我们需要根据设置的一个是否需要跟踪状态标识,判断是否需要显示跟踪信息。而存储这个跟踪信息的变量,假设是string类型的,那么由于它是一个类类型的,在初始化Trace对象的时候,必须在初始化列表中调用string的构造函数以初始化string对象。然而,如果我们这样做了。当在trace类里,进行输出之前判断跟踪状态标识,状态标识显示并原创 2009-03-30 00:00:00 · 770 阅读 · 0 评论 -
Efficient c++笔记(二)
第二章 构造函数和析构函数 2.1 继承 我们应该在不要用到继承的地方避免使用继承。因为继承对象的构造或者清除都要用到父类的构造或者清除函数,如果我们在程序中,需要反复用到继承对象的构造,那么积累起来,它的开销是很可观的;2.2 合成 我们应该在不要用到合成的情况下,避免使用合成。所谓合成就是指在类中还有类对象成员,第一章的内容就是一个例子。2.3 缓式构造 在需要在到变量(这里指原创 2009-03-30 00:01:00 · 848 阅读 · 0 评论 -
c语言中,文件路径读取问题
最近,遇到一个c语言中,文件路径读取问题。问题是:再一个txt配置文件中,存放着要读取的某个其他文件的路径,如何正确的得到这个文件路径。 我首先在用fgets读取了txt中的,文件路径存放于path中 char path[200]; fgets(path,200,fp);然后,将该路径作为fopen的参数传入,想打开该path所指示的文件路径,然而fopen原创 2009-03-28 19:44:00 · 14425 阅读 · 2 评论 -
Efficient c++笔记(三)
第三章 虚函数 如果类X定义了一个虚函数或是它派生于这样的类,那么就会由编译器产生一个虚函数表vbtl。虚函数表拥有为该指定类所定义的所有虚函数的指针。每个类有一个虚函数表,该类的每个对象都有一个隐藏的指向该表的指针。之所以是隐藏的,是因为只有编译器才知道vptr在对象内部的偏移量。编译器在对系那个的构造函数中插入代码以正确的初始化vptr。 虚函数的开销包括: ·原创 2009-03-30 12:23:00 · 684 阅读 · 0 评论 -
指向函数的指针(三)
准确地讲,本文所涉及的内容是C++中较难理解的,本文的目的不是在于将它们解释清楚,因为这需要你循序渐进地做很多练习才可以。看下面一个例子:int (*func(bool real))(int, int)你觉得它的返回值是什么?这里就涉及到了如何理解指向函数的指针的问题了。一些来自C++教材的建议是从里向外解读这个表达式,这里所谓的里面就是func(bool real),那么剩下的部分就转载 2009-04-07 19:08:00 · 614 阅读 · 0 评论 -
指向函数的指针(四)
指向函数的指针的类型就是函数的类型。函数的类型与函数名无关,只与函数返回值和参数有关。函数指针和其他类型指针一样,可以指向不同的具有相同类型的函数。定义函数指针:int *pf( const string &, const string & ); // 喔! 差一点int (*pf)( const string &, const string & ); // ok: 正确第一个转载 2009-04-07 19:11:00 · 625 阅读 · 0 评论 -
Efficient C++(四)
第四章 返回值优化 任何时候,只要消除了对象的创建和释放,都会极大的提高性能。默认情况下,编译器会自动消除局部对象。然而,有的编译器拒绝为已命名的局部对象进行优化,因此,我们写代码的过程中,尽量,少对对象命令。 例如,我们可以用 return MyObj(x); 代替 MyObj obj(x); return原创 2009-04-07 20:47:00 · 830 阅读 · 0 评论 -
指向函数指针(二)------推荐
要完全区分一个函数,可以凭几个特征:一是返回值、二是函数名、三是参数类型与个数。前文提到函数重载时,返回值不作为特征来区分(即只有返回值不同的函数不视为重载函数,第二个视为错误声明)。本文要提到“函数类型”,您将发现函数名不作为特征。 引用:函数类型由其返回值类型及形参表确定,而与函数名无关。 之所以要提函数类型这个概念,是因为本文要弱化函数的名称了。原因很简单,有了指针就不用管它所指对象的转载 2009-04-07 19:02:00 · 616 阅读 · 0 评论 -
指向函数指针(一)
(一)简单的函数指针的应用。//形式1:返回类型(*函数名)(参数表) char (*pFun)(int); char glFun(int a){ return;} void main() { pFun = glFun; (*pFun)(2); } 第一行定义了一个指针变量pFun。首先我们根据前面提到的“形式1”认识到它是一个指向某种函数的指针,这种函数参数是一个转载 2009-04-07 19:01:00 · 751 阅读 · 0 评论 -
求一个字符串中连续出现次数最多的子串【转】
问题描述:求一个字符串中连续出现次数最多的子串,子串的长度可以是 1 。分析问题:乍一看,好像无处下手。简单的穷举效率太低,随着输入的文本增长,时间复杂度和空间复杂度就会火箭般窜升至无法接受的地步。我们需要寻找规律。假设存在一个长度为 N 的子串 S 出现的次数最多。那么它具有哪些特点呢?S 的任一子串的出现次数不少于 S 的出现次数 S 中不会出现转载 2009-08-05 21:40:00 · 4236 阅读 · 1 评论 -
fread使用中遇到的问题
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <object class原创 2009-07-07 16:30:00 · 4972 阅读 · 0 评论 -
C语言 itoa函数及atoi函数
itoa函数及atoi函数 2007-05-11 13:52 C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。以下是用itoa()函数将整数转 换为字符串的一个例子: # include # include void main (void) { int num = 100; char str[25]; itoa转载 2010-01-02 09:29:00 · 2435 阅读 · 0 评论 -
C语言编译全过程
C语言编译全过程 编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。 编译的完整过程:C源程序-->预编译处理(.c)-->编译、优化程序(.s、.asm)-->汇编程序(.o转载 2010-01-06 16:02:00 · 596 阅读 · 0 评论 -
ubuntu下,C/C++通过JNI调用 JAVA类
之前写过一个实现了某种功能的java程序,但由于近日“工作”需要,又需要在c/c++中重新使用该功能。为了节省时间,我采取了在c/c++中调用java程序的方法,但之前没有接触过类似的东西,到网上一查,果然有类似的东西,心中暗喜ing...。查到的资料中有几个不错的网页: http://blog.sina.com.cn/s/blog_48eef8410100fjxr.html原创 2010-04-13 19:16:00 · 2859 阅读 · 0 评论 -
eclipse工程,从linux(ubuntu)到windows的迁移
近日,由于工作需要,需要将之前写的一个java工程转移到linux下运行。系统环境如下: IDE: Eclipse linux: Ubuntu8.04 windows: XP主要步骤如下:1 迁移工程代码 首先,我将xp下的包含有完整项目代码的workspace原创 2010-04-14 15:05:00 · 4478 阅读 · 1 评论 -
c++构造函数初始化列表使用
class A{ A(int x);//A的构造函数};class B{ B(int x, int y);//B的构造函数};B::B(int x, int y) :A(x) //在初始化表里调用A的构造函数{}上述为:(1)如果类存在继承关系,派生类必须在其初始化表里调用基类的构造函数。当然,默认继承的派生类原创 2009-03-14 19:10:00 · 4169 阅读 · 2 评论 -
c中的“字符串”
char *p;p = "abc";这意味着p是什么,当然你可以认为p表示字符串,但是实际是指向含有4个元素a,b,c,‘/0’的数组的首地址的指针原创 2008-12-22 19:56:00 · 529 阅读 · 0 评论 -
有关(*(void(*)())0)()
(*(void(*)())0)(),这是在C陷阱与缺陷中,关于解决计算机开机启动后,硬件读取首地址为0位置的子例程的代码。先看(*fp)(),fp是一个函数指针,*fp就是该指针所指向的函数,(*fp)()就是调用该函数的方式。我们按照题目要求假设可以的话,则字面上可以写成(*0)();但是,正如(*fp)(),运算符*必须要一个指针来作操作数,并且是函数指针,这样经过运算符*作用后的原创 2008-12-22 19:17:00 · 690 阅读 · 0 评论 -
递归学习(一)
1概念 一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数). 如: procedure a; begin . . . a; . . . end; 这种方式是直接调用. 又如: procedure b; procedure c; begin begin . .转载 2009-02-22 14:46:00 · 675 阅读 · 0 评论 -
递归学习(二)
<!-- ajaxInclude("/developerworks/niagara/jsp/getNiagaraContent.jsp?url="+window.location.href,"nextsteps");//-->developerWorks 中国 > Linux >精通递归程序转载 2009-02-22 15:29:00 · 825 阅读 · 0 评论 -
树的有关操作 (三)
/****************************************************//* huffman树 *//****************************************************/linkhuf Creat_Node(int n) //创建一单链表{转载 2009-02-22 15:50:00 · 467 阅读 · 0 评论 -
树的有关操作 (二)
#include"Bintree.h"/*******************************************************//* 已知一课棵二叉树的中序和后序,建立这棵树 *//*******************************************************/void In_Pos_order(Bintree *t转载 2009-02-22 16:01:00 · 463 阅读 · 0 评论 -
用地址替代变量的讨论
大家都知道,每一个变量都有自己的存储空间。而地址就是用来唯一地标识存储空间。这样就很容易让我们联想到:可以直接通过地址来代替变量,来参加程序的运算。也就是说,我们在程序运算中可以不用变量,而直接对地址进行操作。说了这么多,大家可能还不明白,我到底是什么意思。下面就举几个例子来说明。例一:#includeint main(void){ scanf("%d",(int*)0x0100);转载 2009-02-22 16:05:00 · 623 阅读 · 0 评论 -
对const使用的理解
const对很多人来说既陌生又熟悉.可以说很棘手的问题,有些地方很难理解.我在刚学C的时侯,对它的理解也是很模糊的.好像有点理解,但又说不出个所以然来.在此,就向大家分享,我一直以来对它的理解,如有不当之处请指教. const可以说一种常量的声明的关键字,如const int a=2;变量a就是一个常变量,a的值不能被改变,这个改变是一定意义上的不能改变.而是说值的改变不能直接通过a这转载 2009-02-22 16:07:00 · 492 阅读 · 0 评论 -
C++中四种类型转换运算符的使用方法
C++的四个类型转换运算符已经有很久了,但一直没有弄清楚它们的用法,今天看到一本书上的解释,才大致地的了解了其具体的用法.具体归纳如下:reinterpret_cast该函数将一个类型的指针转换为另一个类型的指针.这种转换不用修改指针变量值存放格式(不改变指针变量值),只需在编译时重新解释指针的类型就可做到.reinterpret_cast 可以将指针值转换为一个整型数,但不能用于非指针类型的转换转载 2009-02-22 16:08:00 · 606 阅读 · 0 评论 -
STL算法分类收藏
按是否修改容器中的内容和排序及相关操作,给标准库中的算法函数进行分类:非修改性序列操作(12个)循环for_each()对序列中的每个元素执行某操作查找find()在序列中找出某个值的第一次出现的位置find_if()在序列中找出符合某谓词的第一个元素转载 2009-02-22 18:33:00 · 885 阅读 · 0 评论 -
用数组的方法解决大数、巨数的阶乘结果越界的问题
用数组的方法解决大数、巨数的阶乘结果越界的问题。(不过这里的代码超出了C99标准。)Severity Description Resource In Folder Location Creation Time2 `for loop initial declaration used outside C99 mode jc.c jiecheng line 19 2005年9月5日 12:41:44具转载 2009-02-22 18:56:00 · 1699 阅读 · 1 评论 -
约瑟夫环问题
约瑟夫(josephus)环:假设有n个小孩坐成一个环,并且从第一个小孩开始数,如果数到m个小孩,则该小该离开,问最后留下的小孩是第几个小孩?例如:总共有6个小孩,围成一圈,从第一个小孩开始,每次数2个小孩。游戏情况如下:小孩序号:1,2,3,4,5,6离开小孩序号:2,4,6,3,1最后获胜小孩序号:51、简单办法:(如果只要求输出最后获胜的小孩编号,以下办法原创 2009-02-22 18:59:00 · 901 阅读 · 0 评论 -
static const与#define
声明static const变量而不用#define定义常量 #define由於处理器负责处理,而变量由编译器处理并被收录到代 码调试调试用的符号信息表。例如: #define PI 3.14159 static const double pi = 3.14159原创 2009-02-25 22:11:00 · 755 阅读 · 0 评论 -
c/c++中变量存放的区域资料搜集
一、一个由c/C++编译的程序占用的内存分为以下几个部分说法一:1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全原创 2009-02-26 00:15:00 · 870 阅读 · 0 评论 -
operator new与new operator
C++中的operator new与new operator,看上去挺像的两姐妹,却有天壤之别。operator new(1) 只分配所要求的空间,不调用相关对象的构造函数。当无法满足所要求分配的空间时,则 ->如果有new_handler,则调用new_handler,否则 ->如果没要求不抛出异常(以nothrow参数表达),转载 2009-03-01 21:43:00 · 10898 阅读 · 1 评论 -
指针初试化
对于指针的初始化:按照c++ primer的说法有四种方法:1、0值常量表达式;例如int *p = 0;与int *p = NULL;等价int *aa = 2;会被认为有问题的,“cannot convert from const int to int *”2、类型匹配的对象的地址3、另一个对象之后的下一个地址4、同类型的另一个有效指针原创 2009-02-28 16:52:00 · 560 阅读 · 0 评论 -
判断回文整理
所谓回文,就是字符串的第一个元素等于最后一个元素,第二个元素等于倒数第二个元素,依次类推 法一#includeusing namespace std;bool Find ( char *ch, int n ){ if( n<=1 ) return true; else if( *ch == ch[n-1] ) Find原创 2009-02-28 18:01:00 · 958 阅读 · 0 评论 -
C++常用库函数atoi,itoa,strcpy,strcmp的实现
1.//整数转换成字符串itoa函数的实现#include "stdafx.h"#include using namespace std;void itoaTest(int num,char str[] ){ int sign = num,i = 0,j = 0; char temp[11]; if(sign<0)//判断是否是一转载 2009-02-28 19:12:00 · 4672 阅读 · 2 评论 -
友元的有关知识
为改变Windows编程演练较多而C++中的某些特性用得比较少这一现状,最近在阅读相应典籍以及进行代码实践。以下为近日的一些温习收获:一、友元的不可继承/*************************************************/class B;//B的向前声明class A{friend B;//若之前即无B的定义,又无其声明,则此处报错protected:int转载 2009-03-01 19:13:00 · 853 阅读 · 0 评论 -
关于i++和++i以及左值,右值
今天无意之间看到了帖子上有人说 i++=5; //不合法 ++i=5; //合法 原来也一直迷惑于i++与++i的返回值的问题,但一直没弄明白.这次一并查清楚吧. 首先对于i++的实现是: int temp;转载 2010-08-05 10:17:00 · 835 阅读 · 0 评论