C++语言
文章平均质量分 72
tyf122
热爱学习,认真刻苦
展开
-
最大子矩阵问题
最大子矩阵问题(m*n)这个问题本质上最大子段和问题向二维的扩展,实质上是对数学公式转化后,最后一步可以是一维的情形,因为降低了复杂度。算法中行从0到m,列定为1=0,然后列增加,每次的列是一种数据结构,对应一维的情形。将两行对每一个列求和,每次得到n个列数的数,因而成为一维的情形。行有两个,遍历时有m*m种情况。最后是比较大小,得到最大的值即可。 注意算法中b[j]的原创 2012-07-10 10:38:08 · 744 阅读 · 0 评论 -
C++标准库中的数学函数
C++中数学函数,所在函数库为cmath.h、cstdlib.h、cstring.h、cfloat.h 所以只要加头文件#include、#include、#include、#includeC中数学函数,所在函数库为math.h、stdlib.h、string.h、float.h int abs(int i) 返回整型参数i的绝对值 double cabs(struct compl转载 2012-10-24 16:45:10 · 39965 阅读 · 0 评论 -
assert
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include void assert( int expression );assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badptr.c:#i转载 2013-10-09 10:58:39 · 597 阅读 · 0 评论 -
C++类变量初始化
C++类变量初始化C++为中类对象的构造顺序是这样的:1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员2.进入构造函数后在构造函数中执行一般计算C++类中变量的初始化:1.初始化列表:CSomeClass::CSomeClass() : x(0), y(1){},const常量定义必须初始化,且必须使用初始化列表进行初始化;2.类外初始化:int CSom转载 2013-09-26 14:54:02 · 750 阅读 · 0 评论 -
C++虚函数的实现机制
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的转载 2013-09-26 20:32:04 · 641 阅读 · 0 评论 -
函数传递的参数是原参数的副本
函数的传递的参数是原参数的副本 使用C语言编程,不可能不用到函数,但是函数的参数传递,我们是否真的清楚了呢。本文主要介绍C语言中函数传递的参数。。 函数的参数通常分为两种,普通变量,指针变量。这些参数,将会被函数体调用,当让,也可以传入一些永远不被函数调用的参数,就像你声明了一些变量,却永远不用一样,在语法上是没有问题的。 那么,函数体内调用的传递过来的参数,与原来的参数有转载 2013-09-26 20:28:49 · 677 阅读 · 0 评论 -
c++对象和内存
1 类、对象和内存1.1 通过内存看对象我们先回顾一下类和对象的定义,类是定义同一类所有实例变量和方法的蓝图或原型;对象是类的实例化。从内存的角度可以对这两个定义这样理解,类刻画了实例的内存布局,确定实例中每个数据成员在一块连续内存中的位置、大小以及对内存的解读方式;对象就是系统根据类刻画的内存布局去分配的内存。除了实例变量和方法,类也可以定义类变量和类方法,这是我们通常所说的静态转载 2013-09-26 20:28:52 · 634 阅读 · 0 评论 -
C++虚函数和多态学习
1、什么是虚函数和多态虚函数是在类中被声明为virtual的成员函数,当编译器看到通过指针或引用调用此类函数时,对其执行晚绑定,即通过指针(或引用)指向的类的类型信息来决定该函数是哪个类的。通常此类指针或引用都声明为基类的,它可以指向基类或派生类的对象。多态指同一个方法根据其所属的不同对象可以有不同的行为(根据自己理解,不知这么说是否严谨)。举个例子说明虚函数、多态、早绑定和晚绑定:转载 2013-09-26 20:53:36 · 712 阅读 · 0 评论 -
c++动态联编与静态联编
摘要】:本文阐述了静态联编和动态联编的概念和区别,通过具体实例分析了实现动态联编的条件,指出了虚函数是实现动态联编的基础。【关键词】:静态联编;动态联编;虚函数在C++中,联编是指一个计算机程序的不同部分彼此关联的过程。按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编。 1.静态联编静态联编是指联编工作在编译阶段完成的,这种联编过程是在程序运转载 2013-09-26 21:39:19 · 1120 阅读 · 0 评论 -
C++ 类继承内存布局
C++继承分为两种,普通继承和虚拟继承(virtual)。具体的继承又根据父类中的函数是否virtual而不同。下面就单继承分为几种情况阐述:1.普通继承+父类无virtual函数若子类没有新定义virtual函数 此时子类的布局是 : 由低地址->高地址 为父类的元素(没有vptr),子类的元素(没有vptr).若子类有新定义virtual函数 此时子类的布局是 : 由低地址->转载 2013-09-26 20:32:30 · 1039 阅读 · 0 评论 -
传值 传指针 传引用
传值 :int func(User u); 传指针: int func(User* u); 传引用: int func(User& u); 传值是传参数最常见的方法,相当简单,是C++的基础传参方法。如果参数是整形、字符等基础类型,用传值的方法是最快的,也是最简单的。它的缺陷是对于一些很大的对象,比如上面定义的User对象,使用传值方法时,内存开销比较大,会重新创建一个User对象转载 2013-09-26 20:35:08 · 703 阅读 · 0 评论 -
常见的排序算法
一、冒泡排序#include#includevoid swap(int &a,int &b){ int temp=a; a=b; b=temp;}void BubbleSort(int arr[],int size){ int i,j; for(i=0;i for(j=0;j if(arr[j]>arr[j+1]) swap(原创 2012-08-28 13:06:33 · 364 阅读 · 0 评论 -
跳跃表的实现
跳跃表:就是将线性链表的指针改变成多个,使得可以跳跃中间的一些结点该算法可以很快的提高搜索效率,本人认为本质上还是与哈希散列表一致#include "stdafx.h"#include "targetver.h"#include #include #include "stdafx.h"#include"iostream"#include#include#原创 2012-07-01 17:13:17 · 989 阅读 · 2 评论 -
随机化算法-用数组实现有序递增链表
数组的标号作为地址信息,按照递增的顺序重新存放在link数组中,link数组存放的是下一个元素即下一个大一些的元素的地址。也可以这样理解,link数组是一种函数映射,实现一次运算,使得原本无序的数组经过link组织后有顺序。本算法也可以作为插入排序的一部分书写上用嵌套的[[[....]]]代替链表中->->->..... 关键:注重代码过程中是怎么设置link指针的,怎么修改指原创 2012-07-01 15:36:23 · 788 阅读 · 0 评论 -
最大子段和问题
给定的n个整数(可以是负数)的序列啊a[1..n],求连续的的子段中和最大的值,并给出子段的启始下表和结束下标。注意:子段中可能包含负数,但是必须是连续的,中间不可断开若不允许负数,则只要计算连续正数中和最大的,复杂性较原来低若可以见断,则问题只要找出数组中全部是正数的数之和,问题更加简单 原问题的求解方法一、穷举遍历法该方法直接列举n个数种不同的子段个数,并求和,故有原创 2012-07-09 22:15:27 · 904 阅读 · 0 评论 -
最大m子段和问题
由n个数组成的数组a[n],找出m个子段(不可重复),要求其和最大方法一、遍历,总共有C(n+1,m)C(n+1,m)中情况,时间复杂方法二、动态规划最关键的是b(i,j):表示数组a的前面j项中有i个子段的最大值,且最后一个子段包含a[j];maxb(m,j)(m=故该问题转化为求数组bb(i,j)=max{b(i,j-1)+a[j],maxb(i-1,t)(t...原创 2012-07-10 15:42:14 · 1111 阅读 · 0 评论 -
最长公共子序列问题
给定的两个序列,求其中公共的子序列的最长的并输出子序列是这样的序列,其在原序列中,并且每个元素在原来序列中是严格递增的公共子序列的定理:X={x1,x2,x3,...,xm} Y={y1,y2,y3,...,yn}Z={z1,z2,...,zk};为X何Y的最长公共子序列则:(1)若xm=yn;则zk=xm=yn,且Zk-1是Xm-1和Yn-1的最长公共子序列(2)若原创 2012-07-10 20:12:07 · 762 阅读 · 0 评论 -
随机化算法(随机数产生并模拟抛硬币实验)
源代码来自王晓东算法设计与分析#include "stdafx.h"#include "targetver.h"#include #include #include "stdafx.h"#include"iostream"#include#include#includeusing namespace std;const unsigned long max原创 2012-06-28 19:32:18 · 2481 阅读 · 0 评论 -
矩阵连乘问题
矩阵连乘问题应用动态规划算法,将前面计算的重复值保存,一次来推进下一步的计算,直到得到m[1][n]的值,为最少的乘法次数 m[i][j]:表示计算A[i...j]所需的最少数乘次数 m[i][j]=min(i=s[i][j]记录断开位置,也就是最少计算次数的中间位置。 #includeusing namespace std;void Ma原创 2012-07-11 11:44:51 · 493 阅读 · 0 评论 -
Monte Carlo_素数
蒙特卡罗算法--判断素数 // 素数.cpp : 定义控制台应用程序的入口点。//// MonteCarlo.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include "targetver.h"#include #include #include "stdafx.h"#include"iostream"#includ原创 2012-06-30 20:51:01 · 617 阅读 · 0 评论 -
蒙特卡罗算法--主元素问题
用蒙特卡罗算法求解数组主元素问题蒙特卡罗算法:关键在于概率的分析计算,其理论基础是概率论下面是实现数组主元素问题的方法// MonteCarlo.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include "targetver.h"#include #include #include "stdafx.h"#include"io原创 2012-06-30 20:09:35 · 2478 阅读 · 0 评论 -
舍伍德算法
舍伍德算法主要解决算法中,避免输入所产生的时间复杂度远远超过平均时间的情况。例如快速排序或者线性时间选择中,对划分标准用概率来选取可以在很大程度上避免最坏的情况。下面是线性时间选择算法:// 舍伍德.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "targetver.h"#include #include #incl原创 2012-06-30 13:35:09 · 5361 阅读 · 0 评论 -
8皇后问题
8皇后拉斯维加斯算法与回溯法相结合的求解方法// LasVegasN后问题.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "targetver.h"#include #include #include "stdafx.h"#include"iostream"#include#include#inclu原创 2012-06-30 14:43:20 · 742 阅读 · 0 评论 -
拉斯维加斯 整数分割
拉斯维加斯算法解决整数分割(一次) // 整数分割.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "targetver.h"#include #include #include "stdafx.h"#include"iostream"#include#include#includeusing原创 2012-06-30 21:41:00 · 516 阅读 · 0 评论 -
C++虚析构函数
C++ 虚析构函数 类型需要虚析构函数的另外一个特征 是该类型具有指针成员或引用成员。如果有指针成员和引用成员,则该类型通常需要实现析构函数以及拷贝操作。 通常,一个实现了析构函数的类型同时也需要实现拷贝构造函数与拷贝复制函数。 作为一个经验法则:如果你有一个带有虚函数功能的类,则它需要一个虚析构函数,原因如下: 1. 如果一个类有虚函数功能,它经常作转载 2013-10-19 22:35:30 · 715 阅读 · 0 评论