C++
文章平均质量分 76
Jaee
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
#pragma once与#ifndef两种防止头文件二次编译的区别
在最开始接触到C语言的时候,看到很多大牛们写的代码里面就有#ifndef #define #endif 这三条语句,当时不明白什么意思,慢慢的后来自己也开始用了,也知道了他们合起来使用时为了防止头文件被二次编译,因为我们曾经写代码的过程中一定遇到过等类似的错误吧。到了学习C++的时候,我们老师给我们看他的代码的时候发现他的头文件里用的是#pragma once,就奇怪这是什么呢?然后私下百度转载 2017-05-17 00:21:10 · 427 阅读 · 0 评论 -
判断元素出栈、入栈顺序的合法性
元素出栈、入栈顺序的合法性。如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1),则合法。入栈的序列(1,2,3,4,5),出栈序列为(4,5,2,3,1),则不合法。 定义一个栈s,入栈序列为dataPush,出栈序列为dataPop及dataPop2,长度分别为len1和len2, len3。在判断的方法中,如果两个序列为空或长度不等,则不合法,出栈序原创 2017-07-22 15:51:43 · 1182 阅读 · 0 评论 -
使用两个队列实现一个栈
两个队列实现一个栈队列是先进先出,而栈是先进后出;考虑到我们取栈顶元素的便利性,我们在实现时使得栈顶等于队列头;由于栈的pop弹出栈顶元素,而队列的pop也是弹出栈顶元素,所以我们需要特别处理的是插入操作。由于往栈中添加元素相当于往队列头添加元素,因此我们需要在两个队列中进行元素的转移,比较简单的实现是:1.queue1和queue2在任一时刻至少有一个为空,即如果有元素,所以原创 2017-07-19 10:54:25 · 383 阅读 · 0 评论 -
使用两个栈实现一个队列
2. 两个队列实现一个栈队列是先进先出,而栈是先进后出;考虑到我们取栈顶元素的便利性,我们在实现时使得栈顶等于队列头;由于栈的pop弹出栈顶元素,而队列的pop也是弹出栈顶元素,所以我们需要特别处理的是插入操作。由于往栈中添加元素相当于往队列头添加元素,因此我们需要在两个队列中进行元素的转移,比较简单的实现是:1.queue1和queue2在任一时刻至少有一个为空,即如果有元素,所以元素只在同一个队列中。 2.当有元素需要插入时,将插入的元素插入到空的队列中,并将另一非空队列的元素转移到该队列中,原创 2017-07-19 10:42:28 · 334 阅读 · 0 评论 -
【数据结构】二叉树前中后序遍历、层序遍历(递归实现)
这里使用前序遍历方式建立二叉树主要介绍:递归实现二叉树建立,前序、中序、后续、层序遍历 ,求二叉树深度及节点个数 本文使用序列:array[10] = { 1, 2, 3, -1, -1, 4, -1, -1, 5, 6 };前序遍历算法:若二叉树为空,则算法结束,否则:1)先访问根节点 2)前序遍历访问左子树 3)前序遍历访问右子树前序遍历结果:1 2 3原创 2017-07-05 10:48:49 · 957 阅读 · 0 评论 -
【数据结构】顺序栈(顺序表动态实现)
栈的概念栈:一种特殊的线性表,其只允许在在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一段称为栈顶,另一端称为栈底。不含任何元素的栈称为空栈,栈又称为后进先出的线性表。栈的特点:后进先出(LIFO)顺序栈:顺序堆栈和顺序表数据成员相同,不同之处,顺序堆栈的入栈和出栈操作只允许对当前栈顶进行顺序堆栈所有操作的时间复杂度均为O(1)。原创 2017-06-26 15:36:07 · 728 阅读 · 0 评论 -
【数据结构】顺序队列(链表实现)
队列介绍队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。进行插入操作的一端称为队尾,通常称为入队列;进行删除操作的一端称为队头,通常称为出队列。队列具有先进先出的特性(FIFO)。队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而异,将其称为链队列。实现代码://队列必须一端进行插入(队头)一端进行删除(队尾)#if原创 2017-06-27 23:56:56 · 469 阅读 · 0 评论 -
【C++】操作符重载及实现简单的复数类Complex
操作符重载:重载操作符是具有特殊函数名的函数,关键字operator后面接需要定义的操作符符号。操作符重载也是一个函数,具有返回值和形参表。它的形参数目与操作符的操作数目相同。函数调用操作符可以接受任意数目的操作数。使用运算符重载可以提高代码的可读性。返回类型 operate 操作符(参数列表);原创 2017-05-18 00:50:55 · 767 阅读 · 0 评论 -
【C++】多态(一)
多态——C++三大特性之一多态提供了接口与具体实现之间的另一层隔离,并且改善了代码的组织性和可读性同时也是创建的程序具有可扩展性。而在C++中多态性主要通过虚函数来实现。静态多态 编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用那个函数,如果有对应的函数就调用该函数,否则出现编译错误。int a原创 2016-11-16 11:36:27 · 339 阅读 · 0 评论 -
【C++】C++中拷贝构造函数的参数类型必须是引用
在C++中, 构造函数,拷贝构造函数,析构函数和赋值函数(赋值运算符重载)是最基本不过的需要掌握的知识。 但是如果我问你“拷贝构造函数的参数为什么必须使用引用类型?”这个问题, 你会怎么回答? 或许你会回答为了减少一次内存拷贝? 很惭愧的是,我的第一感觉也是这么回答。不过还好,我思索一下以后,发现这个答案是不对的。原因:如果拷贝构造函数中的参数不是一个引用,即形如CClass(const CClass c_class),那么就相当于采用了传值的方式(pass-by-value),而传值的方式会调用该类转载 2017-05-17 09:03:31 · 1310 阅读 · 0 评论 -
【C++】String类拷贝构造函数——深拷贝普通版和简洁版
拷贝构造函数——深拷贝 简洁版 普通版原创 2017-05-28 14:24:46 · 2281 阅读 · 0 评论 -
【C++】String类拷贝构造函数——浅拷贝优化的三种方式(引用计数)
优化C++浅拷贝函数原创 2017-05-30 21:36:52 · 486 阅读 · 0 评论 -
【C++】继承关系总结
C++是面向对象编程,而其主要目的之一便是提供可重用代码,从而提高编程效率。而C++提供了很好便于扩展和修改类的方法 类继承。继承,能够从已有的类派生出新的类,而派生类继承了原有类(基类)的特征,包括方法。恩… 就像孩子继承父亲的基因 虽然长得很像但也不是一模一样。原创 2016-11-08 20:58:22 · 800 阅读 · 0 评论 -
【数据结构】C语言实现顺序表(静态顺序表)
静态顺序表的定义:顺序表的概念? --用⼀段地址连续的存储单元依次存储数据元素的线性结构。为什么要实现顺序表? --比较数组...顺序表的特点:访问特定元素的时间复杂度为O(1)增加、删除⼀个元素的时间负责的为O(n)长度固定、存储连续顺序表定义:typedef int DataType;#define MAX 100 typedef struct se原创 2017-06-21 07:50:57 · 829 阅读 · 0 评论 -
深入理解C++动态内存管理:malloc/free和new/delete的区别和联系
malloc/free 和 new/delete相同点:都可以用于申请动态内存和释放内存。申请的内存都在堆上分配。不同点:1、new/delete是C++的操作符,而malloc/free是C中的函数。 2、new做两件事,一是分配内存,二是调用类的构造函数;同样,delete会调用类的析构函数和释放内存。而malloc和free原创 2017-04-25 20:15:00 · 896 阅读 · 0 评论 -
函数的调用约定(_cdecl,_stdcall,_fastcall,_pascal)
microsoft的vc默认的是__cdecl方式,而windows API则是__stdcall,如果用vc开发dll给其他语言用,则应该指定__stdcall方式。堆栈由谁清除这个很重要,如果是要写汇编函数给C调用,一定要小心堆栈的清除工作,如果是__cdecl方式的函数,则函数本身(如果不用汇编写)则不需要关心保存参数的堆栈的清除,但是如果是__stdcall的规则,一定要在函数退出(ret)前恢复堆栈。1.__cdecl 所谓的C调用规则。按从右至左的顺序压参数入栈,由调用者把参数弹转载 2017-05-27 17:12:22 · 528 阅读 · 0 评论 -
求数组中出现次数超过一半的数字
一个数组中有一个数字的次数超过了数组的一半,求出这个字符。如:int a[]={2,3,2,2,2,2,2,5,4,1,2,3},求出超过一半的数字是2#includeusing namespace std;bool _CheckArray(int* data, int length){ if ((data == NULL) && (length <= 0)) return原创 2017-07-25 16:13:49 · 498 阅读 · 0 评论
分享