自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 资源 (3)
  • 收藏
  • 关注

转载 C++编译期多态与运行期多态

今日的C++不再是个单纯的“带类的C”语言,它已经发展成为一个多种次语言所组成的语言集合,其中泛型编程与基于它的STL是C++发展中最为出彩的那部分。在面向对象C++编程中,多态是OO三大特性之一,这种多态称为运行期多态,也称为动态多态;在泛型编程中,多态基于template(模板)的具现化与函数的重载解析,这种多态在编译期进行,因此称为编译期多态或静态多态。

2016-03-14 22:06:30 580 1

原创 排序算法之希尔排序

排序算法之希尔排序这一系列主要讲的是排序算法,首先会简单介绍各种排序算法的基本思想,然后会给出每种算法的Python实现和C++实现,代码中均有非常详细的注释。最后会给出不同算法的复杂度分析。希尔排序的基本思想是:将相距某个“增量”的记录组成一个子序列,在每个子序列内分别进行直接插入排序,使得到的结果基本有序(即小的关键字基本在前面,大的关键字基本在后面),最后再对整体使用一次直接插入排序,得到有序序列。

2016-03-08 20:37:06 604 4

原创 排序算法之直接插入排序

排序算法之直接插入排序这一系列主要讲的是排序算法,首先会简单介绍各种排序算法的基本思想,然后会给出每种算法的Python实现和C++实现,代码中均有非常详细的注释。最后会给出不同算法的复杂度分析。直接插入排序的基本思想是:将一个元素插入到已经排好序的有序表中,即得到一个新的、元素个数增1的有序表。我们可以假设最开始的有序表只有一个元素,则重复上述过程,直到所有待排序的元素全部加入到有序表中为止。

2016-03-06 23:21:52 681 1

原创 排序算法之简单选择排序

这一系列主要讲的是排序算法,首先会简单介绍各种排序算法的基本思想,然后会给出每种算法的Python实现和C++实现,代码中均有非常详细的注释。最后会给出不同算法的复杂度分析。**简单选择排序的基本思想是**:通过`n-i`次关键字间的比较,从`n-i+1`个元素中选出值最小的元素,并和第`i(1<=i<=n)`个元素交换。

2016-03-02 21:33:35 655 2

原创 排序算法之冒泡排序

排序算法之冒泡排序这一系列主要讲的是排序算法,首先会简单介绍各种排序算法的基本思想,然后会给出每种算法的Python实现和C++实现代码中均有非常详细的注释。最后会给出不同算法的复杂度分析。 文中Python代码是在Python3.4.3或 Python3.2上实现的,C++代码是在Dev-C++5.7.1上实现的。如果有什么不清楚或者不对的地方,欢迎大家随时指正。冒泡排序的基本思想是:两两比较相

2016-02-28 18:00:46 662 2

原创 Numpy——ndarray对象(2):数组存取和多维数组

Numpy——ndarray对象(2):数组存取和多维数组上节介绍了如何利用numpy创建数组,本节将继续介绍存取numpy数组的一系列知识。 首先先了解最基本的存取数组的操作:当使用整数序列对数组元素进行存取时,将使用整数序列中的每个元素作为下标,整数序列可以是列表或者数组。使用整数序列作为下标获得的数组不和原始数组共享数据空间。当使用布尔数组b作为下标存取数组x中的元素时

2016-02-25 22:48:21 1077 3

原创 C++入门(21):二进制文件、C风格字符串

C++入门(21):二进制文件、C风格字符串二进制文件 可以通过写入二进制数据的办法来存储各种复杂的数据类型; 把数据写入二进制文件,其调用语法为: std::ofstream fileOutput("filename",std::ios::binary);如果想把新数据追加到现有数据后面,需要加上 std::ios.app,即 std::ofstream fileOutput("filen

2016-01-21 10:44:51 729 1

原创 Numpy——ndarray对象(1):创建数组

Numpy——ndarray对象(1)标准安装的Python中用列表( list )保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3],需要有3个指针和三个整数对象。对于数值运算来说这种结构显然比较浪费内存和CPU计算时间。 此外Python还提供了一个 array 模块,array 对象和列表不同,它直接保存数

2016-01-20 11:05:59 5847 2

原创 C++入门(20):字符串

C++入门(20):字符串字符串 提取子字符串 substr() :返回当前字符串的一部分。常见的有两个输入参数的重载函数为:第一个参数表明从哪个位置开始提取子字符串,是一个从0开始的整数值;第二个参数是子字符串的长度。 比较字符串 compare() ; 如果字符串里什么也没有(一个空字符串),empty()函数将返回true值 。添加字符串 字符串拼接 + :可以用来把一些新文本追加到

2016-01-19 09:58:17 585 2

原创 C++入门(19):向量与迭代器

C++入门(19):向量与迭代器容器 容器一般通过模板来实现,即容器一般为模板的实例化。向量容器(头文件 #include <vector>) 如果想创建特定类型的向量,需要使用的语法为:std::vector<type> vectorName; 比如,std::vector<std::string> names;即定义了一个字符串向量。1) 向量可以动态地随着你往它里面添加元素而无限增大——只

2016-01-18 09:51:52 2511 1

原创 C++入门(18):模板

C++入门(18):模板模板( template )、 STL(标准模板库) 在泛型编程技术里,仍需要编写自己的函数和类,但不必限定它们所使用的数据类型(int、double 或 myClass); 只需使用一个占位符(通常用字母T表示),然后用这个占位符来编写函数 。 模板的基本语法,只要把 template <type> 这行代码放在函数或类的前面就可以定义出一个模板;比如:templat

2016-01-17 17:34:33 485 3

原创 C++入门(17):命名空间和模块化

C++入门(17):命名空间和模块化命名空间和模块化 系统级头文件作用:保证C++代码的可移植性; 头文件基本用途:提供必要的函数声明、 用户自定义数据类型(结构和类)、模板和全局性的常量。C预处理器:以 # 开头,不允许以分号结尾。 预处理的条件指令:#if #else #elif #endif #ifdef #ifndef 比如:#ifndef MYCLASS_H

2016-01-16 10:23:48 577 1

原创 C++入门(16):副本构造器和赋值操作符、强制类型转换

C++入门(16):副本构造器和赋值操作符、强制类型转换副本构造器和赋值操作符 副本构造器形式为:MyClass(const MyClass &rhs); ,没有返回类型。 赋值操作符形式为:MyClass &operator=(const MyClass &rhs); 只要声明了一个有指针属性并将在析构器里释放那块内存的类,就需要实现一个副本构造器和一个赋值操作符,两者缺一不可。 一定要保

2016-01-14 13:50:11 536 1

转载 c++虚函数实现原理

c++虚函数实现原理 - [c++]2011-09-15版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://www.blogbus.com/wanderer-zjhit-logs/161830653.htmlFROM: http://pcedu.pconline.com.cn/empolder/gj/c/0503/574706_3.html

2016-01-12 18:07:19 412 2

原创 C++入门(15):从函数或方法返回内存:工厂函数

C++入门(15):从函数或方法返回内存:工厂函数从函数或方法返回内存 一旦需要根据某种条件创建不同类型的对象,就应该使用工厂函数(方法); 工厂函数(或方法)最适合用在需要根据一些存档数据(例如一个文件)来创建不同类型的对象的场合。任何一个函数都不应该把它自己的局部变量的指针作为它的返回值;如果想让一个函数在不会留下任何隐患的情况下返回一个指针,那它只能是一个动态分配的内存块的基地址。 总之

2016-01-12 17:23:22 1267 3

原创 C++入门(14):动态内存管理

C++入门(14):动态内存管理动态内存管理 动态内存只受限于计算机里的硬件内存总量。 从内存池申请一些内存使用 new 语句,new 语句返回新分配地址块的起始地址,如果没有足够的可用空间,new 语句将抛出std::bad_alloc异常; 使用完内存块之后,应该用 delete 语句把它还给内存池; 用 delete 语句把内存块“重置”为未分配状态,但那个指针占用的空间仍保留着,所以

2016-01-11 17:45:40 457 4

原创 C++入门(13):错误处理和调试

C++入门(13):错误处理和调试C++中错误分为:编译时错误和运行时错误; 错误处理和调试方法: 1)让函数返回错误代码; 2)使用assert() 函数:assert() 函数需要一个输入参数,它将测试这个输入参数的真/假状态。如果条件为真,什么事情都不会发生;如果条件为假,程序将停止执行并报告一个错误 Assertion failed!。 3)捕获异常;其基本语法为: try{

2016-01-10 14:16:29 559 3

原创 C++入门(12):高级OOP技术:重载操作符、多继承和虚继承

C++入门(12):高级OOP技术:重载操作符、多继承和虚继承重载操作符 如果要重载某个操作符(比如加号+),只需创建一个名为 operator+ 的方法即可:type operate+(Mytype rhs);多继承 多继承基本语法:以逗号作为分隔符把打算继承的类(包括它们的访问控制限定符)全部列出来即可,比如:class TeachingStudent:public Student,publ

2016-01-09 21:01:42 693 1

原创 C++入门(11):高级OOP技术:虚方法和抽象方法

C++入门(11):高级OOP技术:虚方法和抽象方法直接创建一个指针并让它指向新分配的内存块:type *pointName = new type;,一定要记着释放刚才分配的那个内存块:delete pointName;,否则会造成内存泄露。虚方法 为了让编译器知道它应该根据指针在运行时的类型而有选择地调用正确的方法,就必须把这些方法声明为虚方法; 声明一个虚方法只要在其原型的前面加上 virt

2016-01-08 22:58:26 537 2

原创 C++入门(10):高级OOP技术:静态方法和属性

C++入门(10):高级OOP技术:静态方法和属性创建一个静态方法或静态属性,只要在它的声明前加上 static 保留字即可。静态属性是在同一个类的所有实例之间共享的,不属于某个特定的对象; 在声明了静态属性之后,还需要为它分配一块用来存储有关数据的内存(很重要!!):就像创建变量一样,只要在类声明的外部写出静态属性的类型和名字就可以了,比如:int Pet::count无需创建对象就可以访问类的

2016-01-08 11:15:12 521 1

原创 C++入门(9):类的继承(2)

C++入门(9):类的继承(2)构造器越简明越好,最好只用它来初始化各有关属性。 访问控制通过访问级别实现: 1)public : 任何代码都可以访问; 2)protected : 这个类本身和它的子类可以访问; 3)private : 只有这个类本身可以访问;对函数/方法进行重载一定要慎重,重载方法/函数越多,程序就越不容易看懂; 覆盖方法: 在对方法进行覆盖(注意不是重载)时一定要认

2016-01-06 13:35:40 435 2

原创 零基础入门学习Python(27):模块和包

零基础入门学习Python(27):模块和包今天简单介绍一下Python的模块。 首先,我们知道容器是对数据的封装,函数是对语句的封装,类是对方法和属性的封装,而对于模块,它就是程序。Python有很多模块,如果写代码的时候要用到模块的功能,就需要先导入模块,导入模块有三种方式: 1) import 模块名 2) from 模块名 import 函数名 3) import 模块名 as 新名

2016-01-05 16:02:41 931 2

原创 C++入门(8):类的继承(1)

C++入门(8):类的继承(1)通过继承机制,可以对现有的、可信的代码进行扩展,并应用在新的程序中。 子类是从基类(父类或超类)派生出的类,形式为: class SubClass:public(protected、private) SuperClass{...}对象之间的关系: 1)继承:比如说“狗是一个宠物”,则可以创建一个名为 Pet(宠物)的基类,再由它派生出一个名为 Dog(狗)的子类

2016-01-04 15:16:58 500 2

原创 零基础入门学习Python(26):生成器

零基础入门学习Python(26):生成器生成器(generator):在普通的函数中加上 yield ,使Python模仿协同程序的概念得以实现。 所谓的协同程序就是可以运行的独立函数调用,函数可以暂停或者挂起,并在需要的时候从程序离开的地方继续或重新开始。>>> def myGen(): print('生成器被执行!') yield 1

2016-01-03 16:27:13 480 2

原创 零基础入门学习Python(25):魔法方法(5)定制序列和迭代器

零基础入门学习Python(25):魔法方法(5)定制序列和迭代器容器类型的协议: 如果希望定制不可变的容器,则需要定义__len__(self)和__getitem__(self,key)方法;如果希望定制的容器是可变的,则除了要定义上面两个方法,还需要定义__setitem__(self,key,value)和__delitem__(self,key)方法。 其中,__len__(self)

2016-01-02 11:06:54 968 2

原创 C++入门(7):对象

C++入门(7):对象类 = 属性 + 方法; 类名的第一个字母一般采用大写,类声明的末尾必须加上分号“;”;C++允许在类里声明常量,但不允许对它赋值,除非创建一个静态常量。构造器 1)构造器的名字和它所在类的名字一样; 2)系统会在创建出某个新实例之后,立刻自动调用这个类的构造器; 3)构造器永远不返回任何值。 如果没有在类里定义一个构造器,编译器会自动创建一个,形式为:ClassNa

2016-01-01 12:41:46 396 2

原创 零基础入门学习Python(24):魔法方法(4)描述符

零基础入门学习Python(24):魔法方法(4)描述符描述符就是将某种特殊类型的类的实例指派给另一个类的属性。 某种特殊类型的类指:类中要实现下面三个方法中的至少一个。1) __get__(self, instance, owner): 用于访问属性,返回属性的值2) __set__(self, instance, value): 在属性分配操作中调用,不返回任何内容3) __delete_

2015-12-31 11:35:50 444 2

原创 C++入门(6):复杂的数据类型

C++入门(6):复杂的数据类型内存中,变量类型是根据它们的自然边界进行对齐的;比如,int的起始地址必须是sizeof(int)的整数倍。 std::string s = "asdfgh" ; std::cout << reinterpret_cast<unsigned long>(&s) << std::endl;

2015-12-30 16:17:04 506 1

原创 零基础入门学习Python(23):魔法方法(3)属性访问

零基础入门学习Python(23):魔法方法(3)属性访问在讲解今天的内容之前,我们先重写两个函数__str__()和__repr__(),第一个函数表示可以使用print()打印对象的值,第二个函数表示直接写出对象名就可以打印出对象的值。>>> class Test: def __str__(self): return "Hello everyone.">>

2015-12-29 16:20:14 741 3

原创 C++入门(5):定义个人函数

C++入门(5):定义个人函数函数定义 函数原型通常安排在main()函数的定义之前; 定义函数时,可以给输入参数设置默认值,让这个参数成为可选的,但有一点必须注意:必须把所有的必选参数放在可选参数之前!!内联函数 创建内联函数最直接的办法是使用 inline 关键字并在 main() 函数的前面定义它,所以内联函数不需要先为它定义原型; 某个函数被编译器当做内联函数来处理最直接的效果是:这

2015-12-28 15:07:41 589 3

原创 零基础入门学习Python(22):魔法方法(2)算术运算

零基础入门学习Python(22):魔法方法(2)算术运算利用type()函数可以知道某个对象是什么类型:>>> type(int) #int是类类型<class 'type'>>>> a = 2 #定义一个整数a,即a是类类型int的一个对象>>> type(a)<class 'int'>>>> b = 1>>> a + b #

2015-12-27 14:30:30 988 3

原创 C++入门(4):文件读写

C++入门(4):文件读写对文件进行读写要包含下面的头文件: #include <fstream> ofstream: 输出文件流,文件名可以是绝对路径名或相对路径名 ifstream: 输入文件流std::ofstream fileOutput0(".\\fileTest\\file0.txt"); //将fileOutput0变量与一个特定的文件关联在一起if(fileOutput

2015-12-26 16:47:02 518 1

原创 零基础入门学习Python(21):魔法方法(1)构造和析构

零基础入门学习Python(21):魔法方法(1)构造和析构从这节开始,我们介绍下Python的魔法方法:魔法方法总是被双下划线包围。 之前有提到过初始化的魔法方法__init__(),它返回None,在类定义时有时写__init__()方法,有时不写,只有当我们需要对一个对象进行初始化操作时,才会重写__init__()方法。>>> class Rectangle: def __

2015-12-25 23:11:15 667 2

原创 零基础入门学习Python(20):对象(5)类和对象的内置函数

零基础入门学习Python(20):对象(5)类和对象的内置函数作为对象的最后一节内容,下面通过举例介绍一下类和对象的一些相关的内置函数(BIF)。1、issubclass(class, classinfo):判断class是不是classinfo的子类1)一个类被认为是其自身的子类,object是所有类的基类2)classinfo可以是类对象组成的元组,只要class是其中一个候选类的子类,则返回True,其他情况

2015-12-25 17:02:54 495 2

原创 零基础入门学习Python(19):对象(4)组合、绑定

零基础入门学习Python(19):对象(4)组合、绑定这节先介绍一下组合:即直接把需要的类放进另一种类中去实例化;再介绍一下类、类对象和实例对象;最后再介绍一下绑定:Python严格要求方法需要有实例才能被调用,这种限制其实就是Python所谓的绑定概念。

2015-12-24 22:55:38 458 2

原创 零基础入门学习Python(18):对象(3)继承

零基础入门学习Python(18):对象(3)继承这节先介绍一下继承:子类继承基类(父类或超类)>>> class Parent: def test(self): print("I am calling the method of class Parent.")>>> class Child(Parent): #子类继承基类时,把基类的类名写进子类

2015-12-23 17:17:31 365 2

原创 零基础入门学习Python(17):对象(2)

零基础入门学习Python(17):对象(2)在Python类中定义私有属性只需要在变量名或函数名前加上”__”两个下划线,那么这个属性或方法就成为私有的了。外部不能访问类中的私有属性,可以通过类的公有方法访问>>> class Test: __name = 'Jessica' #在外部将变量名隐藏,可以通过调用方法从内部获取私有变量 def getNam

2015-12-22 15:54:15 373 2

原创 零基础入门学习Python(16):对象(1)

零基础入门学习Python(16):对象(1)Python无处不对象,对象 = 属性 + 方法(变量+函数)>>> class FirstClass: #Python中的类名约定以大写字母开始 #属性 color = 'red' name = 'Jessica' #方法 def eat(self):

2015-12-21 13:39:49 600 2

原创 CPP入门(3):输入、输出

CPP入门(3):输入、输出获得字符串输入int length;std::string name,name1,name2;std::cout << "Enter your name: ";std::cin >> name; //cin使用空白字符作为输入字符串的结束标志length = name.size(); //返回某给定字符串里的字符

2015-12-20 15:23:53 1536 2

原创 零基础入门学习Python(15):二进制存储 pickle 和异常处理

零基础入门学习Python(15):二进制存储 pickle 和异常处理pickle几乎可以把所有Python的对象转换为二进制的形式存储 使用pickle时,需要导入pickle模块>>> import pickle #导入pickle模块>>> myList = [1,2,3,'xiuxiu',['one','two']]>>> pic

2015-12-20 14:56:04 924 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除