C++
文章平均质量分 51
yan_feifei_1993
加油
展开
-
C++数据类型和表达式
C++的数据类型: 1.基本类型:整型:短整型(short int)2个字节数,长整型(long int )4个字节,整型(int)4个字节。 字符型(char):1个字节。 浮点型:单精度型(float)4个字节,双精度型(double)8个字节,长双精度型(long double)8个字节。 ...原创 2018-03-16 16:59:11 · 411 阅读 · 0 评论 -
C++基于对象的程序设计基本概念总结(四)-运算符的重载
10、 运算符重载(1)“<<”与“>>”分别是流插入运算符与流提取运算符,在使用的时候需要在本文件的模块中包含头文件stream,还用过包含“using namespace std;”。(2)运算符重载是定义一个重载运算符的函数,使指定的运算符不仅能实现原有的功能,而且也实现在函数中指定的新的功能。在使用被重载的运算符,系统会自动调用该函数,以实现相应的功能。运算符重载是...原创 2018-07-10 15:04:23 · 354 阅读 · 0 评论 -
C++基于对象的程序设计基本概念总结(五)-继承
19.继承(1) 类与类之间的关系has-A,包含关系,用以描述一个类由多个“部件类”构成,实现has-A关系用类的成员属性表示,即一个类的成员属性是另一个已经定义好的类。use-A,一个类使用另一个类,通过类之间的成员函数相互联系,定义友元或者通过传递参数的方式来实现。is-A,即继承关系,关系具有传递性。(2) 继承的相关概念万事万物皆有继承这个现象,所谓的继承就是一个类继承了另一个类的属性和...原创 2018-07-11 14:55:41 · 423 阅读 · 0 评论 -
C++面试总结
第一部分:简答题1. 一下C++中static_cast 和 dynamic_cast 的区别。答:static_cast 用于有比较明确定义的变换,包括不需要强制转换的变换。 dynamic_cast 适用于类型安全的向下转换,常用在继承中的父类指针向子类指针的转换。若转换成功则返回改类型的指针,若失败,则返回NULL。 Struct 和class 的区别。答:str...原创 2018-07-17 19:27:44 · 1662 阅读 · 0 评论 -
C++使用指针的优点
使用指针可以带来如下的好处:(1)可以提高程序的编译效率和执行速度,使程序更加简洁。(2)通过指针被调用函数可以向调用函数处返回除正常的返回值之外的其他数据,从而实现两者间的双向通信。(3)利用指针可以实现动态内存分配。(4)指针还用于表示和实现各种复杂的数据结构,从而为编写出更加高质量的程序奠定基础。(5)利用指针可以直接操纵内存地址,从而可以完成和汇编语言类似的工作。(6)跟容易实现函数的编写...原创 2018-07-05 20:03:20 · 11504 阅读 · 0 评论 -
C++变量的引用
变量的引用:是为一个变量起了一个别名。 int a; int &b=a;1.声明变量b只是一个引用,不需要另外的开辟内存单元存放b的值,b与a占内存中的同一个存储单元,具有相同的地址。2.必须向定义一个变量,后声明对该变量的引用。对引用只有声明,没有定义。3.在声明一个引用的时候必须同时进行初始化,即声明它代表的是哪一个变量。4.在声明一个引用后,不可以再使之成为另一个变量的引...原创 2018-07-05 20:13:03 · 417 阅读 · 0 评论 -
C++基于对象的程序设计基本概念总结(六)-多态性
20 多态性概念:指相同的对象收到不同的消息或者不同的对象收到相同的消息时产生的不同的实现动作。C++支持两种多态:编译时多态(静态)、运行时多态(动态)。静态多态是通过函数的重载来实现的(运算符重载实际上也属于函数的重载)。要求在程序编译的时候就知道调用函数的全部信息。静态多态性的函数调用速度快、效率高、但是缺乏灵活性,在程序运行前就决定了执行的函数与方法。动态多态性是程序运行过程中才动态地确定...原创 2018-07-12 20:07:45 · 455 阅读 · 0 评论 -
C++面向对象的程序设计的相关概念(一)
1、对象和类概念对象:任何一个对象都应该具备两个要素:属性、行为。在C++中每个对象都有数据(体现了‘属性’)和函数(用来对数据进行操作,以实现某些功能)两部分组成。类:具有共性的实体的抽象。类是对象的抽象,不占有内存。对象是类的特例,即类的具体表现形式,占有存储空间。C++使用class关键字用于定义类,和struct关键字的用法相同。只不过class关键字默认的类型为private 2、面向对...原创 2018-07-07 11:55:49 · 1207 阅读 · 0 评论 -
C++面向对象的程序设计基本概念总结(二)
4.构造函数 构造函数主要用于在定义对象时,完成对象的初始化. 每一个类都应该有一个构造函数,如果用户没有定义构造函数,编译器会自动生成构造函数(参数和函数体为空的构造函数),如果用户自定义了构造函数,那么编译器不再提供默认的构造函数。 特性:1.构造函数的名称必须要与当前类的名称相同。 2.构造函数仅在定义对象时由系统调用,其他时间无法调用。而且只执行一次。 ...原创 2018-07-07 23:01:55 · 601 阅读 · 0 评论 -
C++面向对象程序设计概念全总结(六)--最全的概念总结
1、对象和类概念对象:任何一个对象都应该具备两个要素:属性、行为。在C++中每个对象都有数据(体现了‘属性’)和函数(用来对数据进行操作,以实现某些功能)两部分组成。类:具有共性的实体的抽象。类是对象的抽象,不占有内存。对象是类的特例,即类的具体表现形式,占有存储空间。C++使用class关键字用于定义类,和struct关键字的用法相同。只不过class关键字默认的类型为private.私有成员只...原创 2018-07-15 21:49:41 · 15460 阅读 · 0 评论 -
请编写一个C函数,该函数将给定的一个字符串转换为整数。
int Invert(char *str){ int num=0; while(*str!='\0') { int digital=*str-48; num=num*10+digital; str=str+1; } return num;}原创 2018-09-06 16:50:33 · 3475 阅读 · 0 评论 -
编写一个C函数,该函数将给定的一个整数转换为字符串。
void intToChar(int num, char *pval){ char str[100]; int i,j; int val0=0; int val1=0; val0=num; for (i=0; i<100;i++) { val1=val0%10; val0=val0/10; ...原创 2018-09-06 17:12:34 · 6004 阅读 · 1 评论 -
实现strcmp函数
int mystrcmp(const char* str1,const char* str2){ int temp=0; while(!(temp=*(unsigned char*)str1-*(unsigned char*)str2)&&*str1) { str1++; str2++; } if(temp...原创 2018-09-06 20:42:42 · 495 阅读 · 0 评论 -
请编写一个C函数,该函数在一个字符串中找到可能的最长的字符串,该字符串是由同一个字符组成的。
int ChildString(char* p){ char *q=p; int stringlen=0,len=0,maxlen=0; while(*q!='\0') { stringlen++; q++; } int i=0; int j=0; while(i<stringlen) ...原创 2018-09-07 10:12:52 · 4191 阅读 · 5 评论 -
编写程序,判断链表中是否有环?
使用两个指针来遍历单向链表,第一个指针P1,每次走一步。第二个指针P2每次走两步;当P2指针追上P1的时候就说明链表中有环路了。int testLinkRing(Link *head){ Link *t1=head; Link *t2=head; while(t1->next&&t2->next) { t1=t1-...原创 2018-09-07 10:43:00 · 646 阅读 · 0 评论 -
有一浮点型数组A,用C语言写一函数实现对浮点数组A进行 降序排序,并输出结果,要求要以数组A作为函数的入口.(建议用冒 泡排序法)
有一浮点型数组A,用C语言写一函数实现对浮点数组A进行降序排序,并输出结果,要求要以数组A作为函数的入口.(建议用冒泡排序法)void BubbleSort(double arrr[],int n){ for(int i-0;i<n;i++) { for(int j=0;j<n+1-i;j++) { ...原创 2018-09-07 11:01:39 · 2832 阅读 · 0 评论 -
C++基于对象的程序设计基本概念总结(三)
12. 对象的动态建立与释放在C语言中是利用库函数malloc和free来分配和撤销内存空间的。C++提供了简便而功能较强的运算符new和delete来取代malloc和free函数。注意: new和delete是运算符,不是函数,因此执行效率高。用new分配数组空间时不能指定初值。如果由于内存不足等原因而无法正常分配空间,则new会返回一个空指针NULL(0值),用户可以根据该指针的值判断分配空...原创 2018-07-08 19:14:35 · 557 阅读 · 0 评论 -
基数排序(Radix Sort)
10.基数排序(Radix Sort)基数排序也是非比较的排序算法,对每一位进行排序,从最低位开始排序,复杂度为O(kn),为数组长度,k为数组中的数的最大的位数;(1)算法简介基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。基数...原创 2018-05-08 13:23:11 · 2492 阅读 · 0 评论 -
桶排序(Bucket Sort)
9.桶排序(Bucket Sort)桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。(1)算法简介桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排(2)算法描述和实现:具体算法描述如下:<1>.设置一个定量的数组当作空...原创 2018-05-07 11:16:02 · 596 阅读 · 0 评论 -
形参与实参
形参:在定义函数的时候,函数名后面的括号中的变量是形参。实参:在主函数调用一个函数的时候函数名后面括号的参数是实参。形参在未出现函数调用时,不占内存的存储单元。只有在发生函数调用的时候形参才被分配内存单元,以便接受实参传来的数据。实参变量对形参变量的数据传递是“值传递”,即单向传递,只能实参传给形参。调用结束后,形参单元被释放,实参单元仍保留并维持原值。...原创 2018-03-16 17:14:31 · 665 阅读 · 1 评论 -
C++内置函数
内置函数(inline function): 1,在函数调用的之前,流程的控制要记下当时执行的指令的位置,还要保护现场(记下当时有关的信息),以便在函数调用之后继续执行。在函数调用后,流程返回到先前记下的位置处,并根据记下的信息“恢复现场”,然后继续执行。这些过程都需要时间。如果有的函数需要频繁使用,则所使用的时间会更多,从而降低执行效率。 C++提供一种提高效率的方法,即在编译时将所...原创 2018-03-16 20:13:36 · 1758 阅读 · 0 评论 -
剑指offer-已知链表头指针,逆序返回链表的数据
/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/class Solution {public: vector<int> printL...原创 2018-04-14 15:42:25 · 178 阅读 · 0 评论 -
剑指offer--有序的二维数组查找一个元素
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。class Solution {public: bool Find(int target, vector<vector<int> > array) { bool find=false; ...原创 2018-04-14 15:43:59 · 115 阅读 · 0 评论 -
剑指offer-替换字符串
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。class Solution {public: void replaceSpace(char *str,int length) {if(str==NULL||length==0) return; int org_length=...原创 2018-04-14 15:45:09 · 310 阅读 · 0 评论 -
排序算法选择
插入、冒泡排序的速度较慢,但参加排序的序列局部或整体有序时,这种排序能达到较快的速度。反而在这种情况下,快速排序慢了。 当n较小时,对稳定性不作要求时宜用选择排序,对稳定性有要求时宜用插入或冒泡排序。若待排序的记录的关键字在一个明显有限范围内时,且空间允许时用桶排序。当n较大时,关键字元素比较随机,对稳定性没要求宜用快速排序。当n较大时,关键字元素可能出现本身是有序的,对稳定性有要求时,空间允许的...原创 2018-05-06 10:38:14 · 115 阅读 · 0 评论 -
排序算法总结
排序算法说明(1)排序的定义:对一序列对象根据某个关键字进行排序;输入:n个数:a1,a2,a3,...,an输出:n个数的排列:a1',a2',a3',...,an',使得a1'<=a2'<=a3'<=...<=an'。再讲的形象点就是排排坐,调座位,高的站在后面,矮的站在前面咯。(3)对于评述算法优劣术语的说明稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面...原创 2018-05-07 11:05:13 · 438 阅读 · 0 评论 -
冒泡排序(Bubble Sort)
插入、冒泡排序的速度较慢,但参加排序的序列局部或整体有序时,这种排序能达到较快的速度。反而在这种情况下,快速排序慢了。 当n较小时,对稳定性不作要求时宜用选择排序,对稳定性有要求时宜用插入或冒泡排序。若待排序的记录的关键字在一个明显有限范围内时,且空间允许时用桶排序。当n较大时,关键字元素比较随机,对稳定性没要求宜用快速排序。当n较大时,关键字元素可能出现本身是有序的,对稳定性有要求时,空间允许的...原创 2018-05-07 11:11:11 · 905 阅读 · 0 评论 -
选择排序(Selection Sort)
2.选择排序(Selection Sort):表现最稳定的排序算法之一(这个稳定不是指算法层面上的稳定哈,相信聪明的你能明白我说的意思2333),因为无论什么数据进去都是O(n²)的时间复杂度.....所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。理论上讲,选择排序可能也是平时排序一般人想到的最多的排序方法了吧。(1)算法简介:选择排序(Selection-sor...原创 2018-05-07 11:11:47 · 2740 阅读 · 0 评论 -
插入排序(Insertion Sort)
3.插入排序(Insertion Sort)插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。(1)算法简介:插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-plac...原创 2018-05-07 11:12:29 · 336 阅读 · 0 评论 -
希尔排序(Shell Sort)
4.希尔排序(Shell Sort)第一个突破O(n^2)的排序算法;是简单插入排序的改进版;它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序(1)算法简介希尔排序的核心在于间隔序列的设定。既可以提前设定好间隔序列,也可以动态的定义间隔序列。(2)算法描述和实现先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体算法描述:<1>. 选择一...原创 2018-05-07 11:12:58 · 250 阅读 · 0 评论 -
归并排序(Merge Sort)
5.归并排序(Merge Sort)和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(n log n)的时间复杂度。代价是需要额外的内存空间。(1)算法简介归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先...原创 2018-05-07 11:13:31 · 333 阅读 · 0 评论 -
快速排序(Quick Sort)
6.快速排序(Quick Sort)快速排序的名字起的是简单粗暴,因为一听到这个名字你就知道它存在的意义,就是快,而且效率高! 它是处理大数据最快的排序算法之一了。(1)算法简介快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。(2)算法描述和实现快速排序使用分治法来把一个串(list...原创 2018-05-07 11:14:24 · 282 阅读 · 0 评论 -
堆排序(Heap Sort)
7.堆排序(Heap Sort)堆排序可以说是一种利用堆的概念来排序的选择排序。(1)算法简介堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。(2)算法描述和实现具体算法描述如下:<1>.将初始待排序关键字序列(R1,R2....Rn)构建成大顶堆,此堆为初始...原创 2018-05-07 11:14:52 · 316 阅读 · 0 评论 -
计数排序(Counting Sort)
8.计数排序(Counting Sort)计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。(1)算法简介:是一种稳定的排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。它只能对整数进行排序。(2)算法描述和实现:具体算...原创 2018-05-07 11:15:25 · 201 阅读 · 0 评论 -
编写C函数,实现双向链表删除一个节点P。
编写C函数,实现双向链表删除一个节点P。//删除操作Status ListDelete_Dul(DuLinkList &L,int i,ElemType &e){ if(!(p=GetElemP_DuL(L,i))) return Error; e=p->data; p->prior->next=p->next; ...原创 2018-09-07 11:38:21 · 4570 阅读 · 0 评论