
C/C++
petocute
这个作者很懒,什么都没留下…
展开
-
如何在O(n)时间内找到一个整数数组中的第二大元素
问题描述:如何在O(n)时间内找到一个整数数组中的第二大元素。思路:遍历时同时保存第一和第二就成了。C++实现如下:#includeusing namespace std;const int MINNUM= -32767 ;int find_sec_max( int data[] , int count){ int maxnum= data[0] ; int sec_max原创 2012-04-24 22:58:41 · 1221 阅读 · 0 评论 -
C/C++头文件一览
C、传统 C++#include //设定插入点#include //字符处理#include //定义错误码#include //浮点数处理#include //文件输入/输出#include //参数化输入/输出#include //数据流输入/输出#include //定义各种数据类型最值转载 2012-08-29 14:22:34 · 1294 阅读 · 0 评论 -
visual studio 2010怎么编写运行调试C程序
很简单,其实和vc++6.0一样,只是要先建项目(vc++6.0是先建工程),具体看图解。运行ctrl+F5。调试按F5,下断点什么的,和VC++6差不多。原创 2012-08-29 13:18:19 · 15745 阅读 · 2 评论 -
多态(Polymorphism)的实现机制(上)--C++篇
多态(Polymorphism)是面向对象的核心概念,本文以C++为例,讨论多态的具体实现。C++中多态可以分为基于继承和虚函数的动态多态以及基 于模板的静态多态,如果没有特别指明,本文中出现的多态都是指前者,也就是基于继承和虚函数的动态多态。至于什么是多态,在面向对象中如何使用多态,使用 多态的好处等等问题,如果大家感兴趣的话,可以找本面向对象的书来看看。 为了方便说明,下面举一个简单转载 2012-04-26 21:18:27 · 3045 阅读 · 0 评论 -
C++中堆和栈的完全解析
C++中堆和栈的完全解析内存分配方面:堆: 操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删 除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样代码中的delete语句才能正确的释放本内存空间。我们常说的内存泄露,最常见的就是堆泄露(还转载 2012-04-26 21:12:54 · 520 阅读 · 0 评论 -
C++中string的用法STL
在学习数据结构的时候,任何算法都是要自己写出来,非常考验逻辑思维能力,STL的出现,很多问题的处理都变得简单,常用算法都集成在STL里面,尽管面试基本上大多数只会问数据结构的细节,还是必须得非常了解STL,这是一个软件开发人员必须具备的能力。1、用STL中的string来计算一对字符在一个字符串中出现的次数。(注:实际上是著名的KMP算法)用到两个string类的方法①求字符串的长转载 2012-04-26 22:01:49 · 866 阅读 · 0 评论 -
C++ 学习——const解析
Const作用1. const类型定义:指明变量或对象的值是不能被更新,引入目的是为了取代预编译指令2. 可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。3. 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。4. 可以节省空间,避免不必要的内存分转载 2012-04-26 21:11:08 · 506 阅读 · 0 评论 -
C++的内存分配问题
char *fun(void){char *p="hello";return p;}int main(void){char *s;s=fun();printf("%s\n",s);}程序运行后有什么问题呢?一般人可能会回答说是内存错误,实际上不是, char *p="hello";分配在常量区,不会立即释放。 如果是如转载 2012-04-26 21:15:48 · 1013 阅读 · 1 评论 -
在一个int数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数。
注:本题解可能不唯一。如何查找所有解?算法:设数组a[0...n-1],设有左右两个游标i,j。左游标右移过程中的最大值为max,右游标左移过程中的最小值为min。则当i==j时且min>=max,则有解,其中一解就是a[i]算法是这样的:1)初始化i = 0,j = n-1,max = a[0],min = a[n-1]2)如果a[i] 3)如果a[j] > min 则j转载 2012-04-25 01:05:22 · 2329 阅读 · 2 评论 -
查找链表中倒数第k个结点
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};分析:为了得到倒数第k个结点,很自然的想法是先走到链表的尾端,再从尾端回溯k步。可是输入的是单向链表,只有从前往后的指针而没有从后往前的指针。转载 2012-04-25 01:01:17 · 760 阅读 · 0 评论 -
多重继承
继承方式公有继承--派生类的子类和派生类对基类的成员具有一样的访问权限私有继承--基类的公有成员和保护成员,变成派生类的私有成员保护继承--基类的公有成员和保护成员,变成派生类的保护成员 三种继承方式中的基类的私有成员在派生类中权限不变。 派生类的构造函数中,需要初始化基类和成员对象,即赋初值。 但是对于使用无参构造函数(这里的无参函数包括默认构造函数)可以不列转载 2012-04-25 00:14:15 · 522 阅读 · 0 评论 -
构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
对象是由“底层向上”开始构造的,当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的构造函数,依次类推,直至到达派生类次数最多的派生次数最多的类的构造函数为止。因为,构造函数一开始构造时,总是要调用它的基类的构造函数,然后才开始执行其构造函数体,调用直接基类构造函数时,如果无专门说明,就调用直接基类的默认构造函数。在对象析构时,其顺序正好相反。 下面简单介绍下这三个函数。构造函转载 2012-04-25 00:11:49 · 700 阅读 · 0 评论 -
彻底搞定C指针-函数名与函数指针
函数名与函数指针一 通常的函数调用 一个通常的函数调用的例子://自行包含头文件void MyFun(int x); //此处的申明也可写成:void MyFun( int );int main(int argc, char* argv[]){ MyFun(10); //这里是调用MyFun(10);函数 return转载 2012-04-25 00:06:37 · 621 阅读 · 0 评论 -
static,const和typedef关键字的几种用途
static关键字至少有下列n个作用: (1)函数体内static变量的作用范围为该函数体 ,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值; (2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问; (3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内; (4转载 2012-04-25 00:03:11 · 708 阅读 · 0 评论 -
GetMemory错误讲解(指针练习)
错误程序:void GetMemory( char *p ){ p = (char *) malloc( 100 );}void Test( void ) { char *str = NULL; GetMemory( str ); strcpy( str, "hello world" ); printf( “%s”,str );}这个一个考验对指针转载 2012-04-25 00:02:03 · 436 阅读 · 0 评论 -
GetMemory函数的几种经典考法
代码1: void GetMemory(char *p){ p = (char*)malloc(100);}int main(int argc, char *argv[]){ char *str = NULL; GetMemory(str); strcpy(str, "Hello"); return 0;}str没有得到分配内存的地址值。 内存空间状态:首先申请了四转载 2012-04-24 23:47:06 · 563 阅读 · 0 评论 -
n*n阶矩阵逆时针输出
问题描述:n*n阶矩阵逆时针输出。即:输入:5输出:01 16 15 14 1302 17 24 23 1203 18 25 22 1104 19 20 21 1005 06 07 08 09思路: 经分析,可以发现此题输出格式犹如转圈圈。当n为偶数的时候刚好转了n/2圈;当n为奇数的时候,同样也是转了n/2圈,因为n/2取整。又根据转圈特色,可以把转圈分为向下原创 2012-04-24 23:29:44 · 3233 阅读 · 0 评论