- 博客(37)
- 资源 (1)
- 收藏
- 关注
转载 求一个字符串中连续出现次数最多的子串
求一个字符串中连续出现次数最多的子串,例如:abcbcbcabc, 这个串中连续出出次数最多的子串是bc, 它出现了3次。以下是我的实现代码,用c语言实现,已经编译通过。1 #include 2 #include 3 #include 4 5 int count = 0; 6 char sub_str[256]; 7 8 void find_str(char
2013-09-15 20:22:28
570
转载 C++多重继承下的指针类型转换
在C++中,指针的类型转换是经常发生的事情,比如将派生类指针转换为基类指针,将基类指针转换为派生类指针。指针的本质其实就是一个整数,用以记录进程虚拟内存空间中的地址编号,而指针的类型决定了编译器对其指向的内存空间的解释方式。 基于上面的理解,我们似乎可以得出一个结论,C++中对指针进行类型转换,不会改变指针的值,只会改变指针的类型(即改变编译器对该指针指向内存的解释方式),但是这个结论在
2013-09-14 12:16:49
582
转载 为什么基类的析构函数是虚函数
1.为什么基类的析构函数是虚函数? 在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生。 下面转自网络:源地址 http://blog.sina.com.cn/s/blog_7c773cc50100y9hz.html a.第一段代码 #includeusing namespace std;class ClxB
2013-09-12 20:24:20
632
转载 C++ 虚继承对基类构造函数调用顺序的影响
继承作为面向对象编程的一种基本特征,其使用频率非常高。而继承包含了虚拟继承和普通继承,在可见性上分为public、protected、private。可见性继承比较简单,而虚拟继承对学习c++的难度较大。首先,虚拟继承与普通继承的区别有:假设derived 继承自base类,那么derived与base是一种“is a”的关系,即derived类是base类,而反之错误;假
2013-09-12 20:07:36
736
转载 单继承与虚函数表
一 单继承1) 代码:Code#include iostream>using namespace std;class A{public: void f1(){cout "A::f1" endl;} void f2(){cout "A::f2" endl;} virtual void v1(){cout "A::v1"
2013-09-12 19:02:32
640
转载 const 在c和c++中的区别
const 在c和c++中的区别 http://tech.e800.com.cn/articles/2009/722/1248229886744_1.html++++++++++++++++++++++++++++++++++++++++1. C++中的const正常情况下是看成编译期的常量,编译器并不为const分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合
2013-09-12 10:57:31
687
转载 sizeof()用法汇总
sizeof()用法汇总sizeof()功能:计算数据空间的字节数1.与strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。 而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。2.指针与静态数组的sizeof操作 指针均可看为变量类型
2013-09-11 15:46:59
590
转载 表插入排序
上篇文章已经提到直接插入排序中,时间消耗在了元素间的比较次数和移动这两方面。折半插入排序可以减小比较次数,而表插入排序则可以避免元素移动。但它需要建立数据结构,并且需要额外的空间(省时一般都耗空间,这个在算法上很常见哦!)。首先给出表结构,定义如下:[cpp] view plaincopy#define SIZE 100
2013-09-11 14:06:22
959
转载 用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至最后一个元素并输出该元素的值
约瑟夫环:用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至最后一个元素并输出该元素的值分类: C/C++2011-07-28 11:52 900人阅读 评论(0) 收藏 举报struct测试[cpp] view plaincopy约瑟夫环主要是要定义一个循环链表,自己写的,经过验证。 [c
2013-09-07 11:33:51
711
转载 用两个栈模拟队列
[cpp] view plaincopy#include "stdafx.h" #include using namespace std; //用栈模拟队列 class Data{ public: Data():data(0),next(NULL){} Data(int i):data(i),next(NU
2013-09-06 14:33:56
570
转载 堆排序
堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>
2013-09-04 11:30:52
446
转载 二叉树的二叉链表表示与实现
二叉树的存储结构可以用顺序存储和链式存储来存储。二叉树的顺序存储结构由一组连续的存储单元依次从上到下,从左到右存储完全二叉树的结点元素。对于一般二叉树,应将其与完全二叉树对应,然后给每个结点从1到i编上号,依次存储在大小为i-1的数组中。这种方法只适用于完全二叉树,对非完全二叉树会浪费较多空间,最坏情况一个深度为k的二叉树只有k个结点,却需要长度为2的k次方减一长度的一位数组。事实上,二叉树一般使
2013-09-02 19:56:30
795
转载 二叉树遍历非递归实现
遍历是二叉树各种操作的基础,上一节给出的遍历算法是递归实现的,本节给出二叉树遍历的非递归实现,非递归实现需要使用前面讲到的数据结构——栈、队列来作为辅助空间。先序遍历[cpp] view plaincopyint preorder_traverse(bitree bt, int (*visit)(elemtype e))
2013-09-02 19:27:51
537
转载 Windows API串口通信编程概述
(一)Windows API串口通信编程概述Windows环境下的串口编程与DOS环境下的串口编程有很大不同。Windows环境下的编程的最大特征之一就是设备无关性,它通过设备驱动程序将Windows应用程序同不同的外部设备隔离。Windows封装了Windows的通信机制,这种方式称为通信API,Windows程序可以利用Windows通信API进行编程,不用对硬件直接进行操作。这种体系被称
2013-08-30 20:42:42
871
转载 linux setsockopt
1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,
2013-08-29 17:13:38
543
转载 在windows下获取主机ip地址
在很多防火墙过滤规则中,都可以对ip地址进行过滤,实现访问控制。比如我们可以通过设置规则,禁止对ip地址:59.64.114.98的访问。这个ip地址代表着www.qq.com的ip地址。而对于普通用户来讲,他们并不知道这一串数字代笔着什么,相反,他们更容易接受w
2013-08-29 13:41:02
1106
转载 非阻塞connect()和accept()
非阻塞connect()和accept() 一.select()函数 select()函数准备好读的条件: 1>.套接口有数据可读 2>.该连接的读这一半关闭(也就是接收了FIN的TCP连接)。对这样的套接口进行读操作将不阻塞并返回0(也就是返回EOF)。 3>.该套接口是一个侦听套接口且已完成的连接数不为0。 4>.其上
2013-08-29 10:49:41
550
转载 系统字节序检测的两种方法
下面代码示范了两种检测系统字节序的方法。第一种方法,使用强制类型转换的方式。C 语言在把占用2个字节的 short 变量强制转换为 char 之后,会把 short 变量的首地址赋给 char 变量,可以根据 char 变量的值判断系统字节序是 大端 还是 小端。第二种方法,利用 联合类型 的特性。联合类型 共享同一段内存,首地址是相同的。测试环境: ubun
2013-08-28 15:33:10
903
转载 套接字模型
套接字I/O模型1:Select模型 Select模型是一种常见的模型,通过select函数来确定套接字状态。在网络应用程序中,通过一个线程来设计一个循环,不停的调用select函数,判断套接字上是否存在数据或者是否能够向套接字写入数据等int select(int nfds,fd_set FAR *readfds, fd_set FAR *writefds,fd_set
2013-08-27 21:19:31
536
转载 INADDR_ANY
见如下server listen:80 0.0.0.0 //INADDR_ANY,外部的client ask 从哪个server的地址近来都可以连接到80端口.8088 192.168.1.11 //外部的client ask 从server地址192.168.1.11进来才可以连接到8088端口.8089
2013-08-27 15:26:00
602
转载 有两个变量a,b,不使用任何中间变量交换它们
//-------------------------------- // 环境:VS2005 // 用途:不用中间变量交换两个数 // 时间:2010.9.25 // 作者:http://pppboy.blog.163.com //-------------------------------- #include "stdafx.h" #include using namespace std;
2013-08-20 17:33:27
597
转载 C/C++里面的左移和右移
先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用int i = 1;i = i 也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成000... 0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移n位就是乘以2的n次方了(有符号数不完全适用,因为左移有可能导致符号
2013-08-20 17:12:24
1553
转载 两个变量a,b,不用“if”,“? :”,switch或者其它判断语句,找出两个数中间比较大的
问题有两个变量a,b,不用“if”,“? :”,switch或者其它判断语句,找出两个数中间比较大的。解决方案//--------------------------------------------------- // 环境:VS2005 // 用途:比较两个数大小测试 // 时间:2010.9.25 // 作者:http://pppboy.blog.163.com//------
2013-08-20 16:02:51
2470
2
转载 后缀表达式
表达式的表示形式有中缀、前缀和后缀3中形式。中缀表达式按操作符的优先级进行计算(后面代码实现只包括+、-、*、\,小括号),即数学运算。 后缀表达式中只有操作数和操作符。操作符在两个操作数之后。它的计算规则非常简单,严格按照从左到右的次序依次执行每一个操作。每遇到一个操作符,就将前面的两个数执行相应的操作。 由后缀表达式计算中缀表达式原理:计算机处理后缀表达式求值问题是比较方便的,即将遇到
2013-08-20 10:41:40
481
转载 虚基类
一:虚基类的作用 当一个类的部分或者全部基类来自另一个共同的基类时,这些直接从一级共同基类继承来的成员就拥有相同的名称,这样就可能出现派生的二义性;且在派生类对象中,这些同名成员在内存中同时拥有多个拷贝,可以使用作用域分辨符来唯一标识并分别访问他们,也可以将共同基类设置成为虚基类,这时从不同路径继承过来的该类成员在内存中就只有一个拷贝,这样就解决了唯一标识问题。二
2013-08-19 11:47:41
663
转载 C++继承:同名隐藏、覆盖,虚函数
不同作用域声明的标识符的可见性原则: 如果存在两个或多个具有包含关系的作用域,外层声明了一个标识符,而内层没有再次声明同名标识符,那么外层标识符在内层依然可见,如果在内层声明了同名标识符,则外层标识符在内层不可见,这时称内层标识符隐藏了外层同名标识符,这种现象称为隐藏规则。 在类的派生层次结构中,基类的成员和派生类新增的成员都具有类作用域。二者的作用范围不同,是相互包含
2013-08-19 10:06:05
763
转载 基类与派生类转换
一、 基类与派生类的转换 3种继承方式(公用、保护、私有继承)中,公用派生类才是基类真正的子类型,它完整地继承了基类的功能。 不同类型数据之间在一定条件下可以进行类型的转换。基类与派生类对象之间是否也有赋值兼容的关系,可否进行类型间的转换?回答是可以的。基类与派生类对象之间有赋值兼容关系,由于派生类中包含从基类继承的成员,因此可以将派生类的值赋给基类对象,在用到基类对象
2013-08-18 17:27:49
582
转载 C++中public,protected,private访问
当private,public,protected单纯的作为一个类中的成员权限设置时:private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问. protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问 public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问
2013-08-18 16:38:24
466
转载 C++ delete和delete[]
一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论。做个备份,以免丢失。 C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。 关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2)
2013-08-18 11:06:25
473
转载 指向类成员的指针
在C++语言中,可以定义一个指针,使其指向类成员或成员函数,然后通过指针来访问类的成员。这包括指向属性成员的指针和指向成员函数的指针。1.指向数据成员的指针在C++语言中,可以定义一个指针,使其指向类成员。当属性成员为静态和非静态时,指针的使用也有不同。其中,指向非静态数据成员的指针定义格式如下:1. 数据类型>类名>::*指针名>[=&类名>::非静态数据成员>]
2013-08-17 21:17:50
415
转载 常对象
话题的引入:C++采取了不少有效的措施(如设private保护)以增加数据的安全性,但也可以在不同的场合通过不同的途径访问同一个数据对象。有时在无意之中的误操作会改变有关数据的状况,而这是人们不希望出现的。 例如:[cpp] view plaincopyprint?//程序1 #include using namesp
2013-08-17 17:17:22
794
转载 常引用
本文讲在基于对象的程序设计中,函数中传递参数使用更广泛的技术,利用引用及常引用的话题。 先从引用的作用开始谈起。 一、引用用在参数传递中的优势:带回修改值及节省开支 先从一个经典的例子开始。 假如现在要交换两个整数,编写出的程序如下:[cpp] view plaincopyprint?//程
2013-08-17 16:56:32
1488
转载 指针常量和常量指针
在C++的学习中,有人经常搞不清楚“常量指针”和“指针常量”这两个概念。其实简单一点讲,“常量指针”所指向的地址上的数据是常量,而“指针常量”所指向的地址是常量,地址上面的数据是可以变化的。 下面看及格简单的例子,可以说明他们的区别: 第一个 1 void main(){ 2 char *str1={"Hello"}; 3
2013-08-17 16:38:42
469
转载 C++拷贝构造函数详解
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plaincopyint a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。
2013-08-17 10:57:39
473
转载 C++ 成员列表初始化
类对象的构造顺序是这样的:1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员 初始化阶段可以是显式的或隐式的,取决于是否存在成员初始化表。隐式初始化阶段按照声明的顺序依次调用所有基类的缺省构造函数,然后是所有成员类对象的缺省构造函数。2.进入构造函数后在构造函数中执行一般计算 计算阶段由构造函数体内的所有语句构成。在计算阶段中,数据成员的设置被认
2013-08-16 21:19:10
492
转载 C++ 初始化成员列表
C++在类的构造函数中,可以两种方式初始化成员数据(data member)。1,在构造函数的实现中,初始类的成员数据。诸如:class point{private: int x,y;public: point(int m=0,int n=0) { x=m; y=n; } int GetX() { return x; }
2013-08-16 21:08:00
508
转载 C++的const类成员函数
我们知道,在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编译错误。例如,[cpp] view plaincopyconst char blank = ‘’; blank = ‘\n’; // 错误 面向对象程序设计中,为了体现封装性,通常不允许直接修改类对象的数据成员
2013-08-16 21:01:03
487
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人