自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 栈和队列面试题

本篇博客列举和实现了关于栈和队列的一些面试题:1.实现一个栈,要求实现Push(出栈)、pop(入栈)、Min(返回最小值)的时间复杂度为O(1)2.使用两个栈实现一个队列3.使用两个队列实现一个栈4.元素出栈,入栈的合法性。如入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1)5.一个数组实现两个栈(共享栈)实现:1.实现一个栈,要求实现Push(出栈)、pop(入栈)、Min(返...

2018-07-08 14:46:22 211

原创 【C++】多态(三)-------虚拟继承和菱形虚拟继承(带有虚函数)

1.菱形继承(带有虚函数)(1)派生类未增加新的虚函数class B{public: virtual void TestFunc1() { cout << "B::TestFunc1" << endl; } virtual void TestFunc2() { cout << "B::TestFunc2" << endl; }...

2018-07-07 13:23:24 258

原创 【C++】多态(二)---------多态的调用原理和带有虚函数的对象模型

环境:win10+vs2015为什么派生类对基类的虚函数进行重写后,通过基类对象的指针或引用来调用该虚函数,就可以实现多态呢?我们来探究一下多态的调用原理吧!1.多态的调用原理:如下代码:#include<string>class Base{public: virtual void TestFunc1() { cout << "Base::TestFunc1...

2018-07-06 13:01:24 261

原创 【C++】多态(一)

     这篇博客简单介绍了多态的概念,分类,动态多态实现的条件,重写等几个方面,希望能够加深对于多态的理解。1.概念多态:指的是同一个事物的多种表现形态2.多态的分类分为:1)静态多态:编译器在编译期间来确定程序的行为(确定具体调用哪个函数)       a)函数重载       b)泛型编程2)动态多态:在程序运行时,根据基类的指针(引用)指向的对象来确定调用哪个类的虚函数3.代码实现一个多态...

2018-07-06 11:08:52 149

原创 继承与继承体系中派生类的对象模型

  继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。继承格式继承权限和访问限定符继承权限和访问限定符继承方式基类public成员基类protected成员基类private成员继承引起的访问控制关系变化概述public继承仍为public成员仍为protected成员不可见基类的非私有成员在子类的访问属性都不...

2018-07-04 14:51:41 241

原创 【C++】写时拷贝(copy on write)与引用计数

  上一篇博客我们谈到了字符串的深拷贝与浅拷贝,在浅拷贝中,由于多个对象共用同一块内存空间,导致同一块空间被释放多次而出现问题,那能否保证:当多个对象共享一块空间时,该空间最终只释放一次呢?这就是我们今天要说的引用计数引用计数原理:当多个对象共享一块资源时,要保证该资源只释放一次, 只需记录有多少个对象在使用该资源即可,每减少(增加)一个对象使用, 给该计数减一(加一),当最后一个对象不使用时,该...

2018-07-04 10:14:34 542

原创 C++中字符串的深拷贝与浅拷贝

  在C++中,字符串是用String类型定义的,字符串拷贝分为浅拷贝(位拷贝)和深拷贝两种,下面给出了深拷贝的两种不同的实现方式(普通版和简洁版)浅拷贝首先什么是浅拷贝?  浅拷贝又称为位拷贝,编译器只是将对象中的值拷贝过来,如果对象中管理了资源,就会导致多个对象共享同一份资源,当释放时就会进行多次释放造成程序错误。class String{public: String(const cha...

2018-07-03 14:07:57 3579

原创 C++中动态内存管理,用malloc/free模拟实现new/new[],delete/delete[]

     C++中动态内存管理的方式与C语言有所不同,在c++中通过new和delete运算符进行动态内存管理,通过深入剖析new/new[]和delete/delete[]来对c++的内存管理有更深入的了解C语言堆上使用malloc/calloc/realloc/free进行动态内存管理, malloc/calloc/realloc用来在堆上开辟空间,free将申请的空间释放掉面试题:mallo...

2018-06-30 19:37:23 874

原创 【C++】模拟实现日期类

本篇博客完善了日期类:实现了以下操作class Date { //构造函数//拷贝构造函数// 当前日期days天后是什么日期? Date operator+(int days); // 当前日期days天前是什么日期? Date operator-(int days); // 两个日期之间差了多少天? Date operator-(const Date& d); ...

2018-06-25 17:18:35 261

原创 链表和顺序表的面试题

这篇博客记录了链表和顺序表的一些常见面试题。包含了以下题目:// 从尾到头打印单链表 void PrintFromTailToFront(PNode pHead);// 删除无头单链表的非尾结点,要求:不能遍历链表 void DeleteNotTailNode(PNode pos);// 在无头单链表pos位置前插入值为结点data的结点 void InsertPosFront(PN...

2018-06-21 17:16:04 214

原创 类的静态成员,const成员,内联函数和运算符重载

静态成员:声明为static的类成员(成员数据或成员函数)称为类的静态成员特性:(1)静态成员为所有类所共享,不属于某个具体的实例(2)类的静态成员在类内声明,不分配空间,必须在类外定义,定义时不添加static关键字(3)类的静态成员函数没有默认的this指针,在它里面不能使用非静态数据成员注意:静态成员函数的默认调用约定为__cdecl默认调用约定静态成员函数不可以调用非静态成员函数,非静态成...

2018-06-21 17:03:15 239

原创 【C++】类的6个默认成员函数

介绍类的6个成员函数之前,我们先来看一下this指针this指针this 指针是成员函数里面的一个隐藏指针,指向了调用该函数的对象本身。this指针特性:(1)this指针的类型为:类类型* const(2)this指针并不是对象本身的一部分,不影响sizeof结果(3)this指针的作用域在类“成员函数”内部(4)this指针是”类成员函数”的第一个默认隐含参数,编译器自动维护传递,类编写者不能...

2018-06-14 19:00:08 1118

原创 用栈来实现迷宫

迷宫下面先简单的介绍一下迷宫,我们给出的迷宫实际上是一个二维数组,在二维数组中1表示可以走通,0表示走不通,如下图所示给一个简单的迷宫: 实现代码:maze.h文件// 用递归的方式求解简单迷宫问题#define MAX_ROW 5 #define MAX_COL 5 #include "Stack.h"typedef struct Maze{ int ...

2018-06-11 18:23:27 3143

原创 初识C++--------------缺省参数,函数重载及引用

缺省参数:1)定义:C++相对于C语言来说,函数参数检测更加严格。缺省参数指的是在声明或者定义函数时为函数的参数指定一个默认值,在调用函数时,若没有指定实参就采用默认值,否则使用指定的实参,如下面的代码:void test(int a=10){ cout<<a<<endl;}int main(){ test();//输出10,没有传参时使用参数的默认值...

2018-06-09 23:23:08 195

原创 二叉搜索树及其实现与应用

   首先什么是二叉搜索树?二叉搜索树又称为二叉排序树,它是一个空树或者具有以下性质:1)若它的左子树不空,则左子树上的所有节点的值都小于根节点的值2)若它的右子树不空,则右子树上的所有节点的值都大于根节点的值3)它的左右子树也分别为二叉搜索树由二叉树的定义可以看出它是递归定义的,下面是一些二叉树的基本操作的递归实现:typedef int DataType;typedef struct BST...

2018-06-08 21:31:46 2203

原创 C语言总结

C语言总结:

2018-03-31 21:36:49 137

原创 转移表(函数指针数组)和回调函数(通过函数指针调用的函数)

上一篇文章简单介绍了函数指针和函数指针数组,本篇文章是介绍他们的用途。函数指针数组的用途-----转移表:通过转移表来实现一个简单的计算器代码如下:#define _CRT_SECURE_NO_WARNINGS 0#include<stdio.h>#include<stdlib.h>int Add(int x, int y){ return x + y;//加...

2018-03-16 18:44:20 374

原创 浅析指针数组,数组指针,函数指针,函数指针数组,指向函数指针数组的指针

对于指针有几个比较难的概念,下面做一些简单的分析:数组指针:是指针,该指针有能力指向一个数组指针数组:是数组,是一个存放指针的数组函数指针:是指针,该指针有能力指向一个函数函数指针数组:是数组,是一个存放函数指针的数组指向函数指针数组的指针:是指针,指针指向一个数组,数组的元素为函数指针。代码说明:#include <stdio.h>#include <stdlib.h>...

2018-03-15 21:29:13 301

原创 编辑器与编译器,readelf命令,与linux下软件安装

一.编辑器:linux下除了vim这样的编辑器外还有好多比较常用的编辑器:1.Emacs      著名的集成开发环境和文本编辑器,Emacs的标语就是“可扩展、可定制、自文档化的实时显示编辑器。”要注意的是,在它的口号中,并没有提到“易用”或者是“直观”。这并不是为那些需要“所见即所得”软件的用户而设的;如果你需要一些像拼写检查这样的写作工具,它也不适合你。2.vim   vim是一个类似于vi...

2018-03-06 21:25:04 852

原创 linux在目录中执行增删查(cd, touch, ls, rm, mv等)改文件动作需要的权限

  在linux系统下,在目录中执行增删查(cd,touch, ls, rm, mv等)改文件动作需要哪些权限,我们今天来研究一下,首先我们需要认识这几个字母,r(读)权限,w(写)权限,x(执行)权限。1.cd(进入目录)2.touch(在目录中创建文件)3.ls(在目录中查看文件)4.mv(在目录中移动文件)和rm(在目录中删除文件)...

2018-03-06 21:24:40 248

原创 使用命令安装gcc/g++,vim和gdb

Linux中使用gcc/g++来编译程序,使用gdb来调试程序,vim来编写程序,这些工具都可以进行配置和安装。1.vim在命令行中输入vi可以查看vim的信息,信息如下:我们可以通过cd~到当前工作目录下,然后通过ls-al来查找一个名叫.vimrc的隐藏文件(若无则通过touch .vimrc创建一个),通过修改.vimrc里的内容来进行配置,如下:2.gcc/g++Centos中使用yum来...

2018-03-04 17:33:47 333

原创 实现进度条程序. 通过makefile进行编译

在Linux系统下写了一个简单的进度条实现程序,并通过makefile进行编译1.在proc_bar.c中编写代码如下:#include <stdio.h> ...

2018-03-03 16:24:57 221

原创 linux中重要的目录和命令

重要目录:/proc, /sys, /SElinux, /bin, /usr/lib, /usr/local, /var, /tmp(1)/proc: 特殊文件目录。此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间, 这个目录采用一种特殊的文件系统格式(proc格式,内核支持这种格式。其中包含了全部虚拟文件。它们并不保存在磁盘中,也不占据磁盘空间(...

2018-02-26 23:00:34 203

原创 模拟实现printf

要求:能完成下列函数的调用print("sccc d.\n","hello",'b','i','t',100);print函数原型:print(char*format, ...) printf函数原型:int printf( const char *format [, argument]... );printf函数可以这样用:printf("%s","hello world"); ...

2018-02-25 21:29:24 119

原创 可变参数列表源码的理解与剖析

C语言中的可变参数:通过将函数的实现为可变参数的形式,使函数可以接受一个及一个以上的参数,参数个数不固定例如:实现一个函数可以求任意个参数的平均值#include<stdio.h>#include<stdlib.h>#include<stdarg.h>int average(int n, ...){ va_list arg; //typedef ...

2018-02-19 17:59:11 180

原创 函数的栈帧

这篇文章简单描述了函数的栈帧和调用过程,通过一段代码来进行分析:#includeint Add(int x, int y){ int z = 0; z = x + y; return z;}int main(){ int a = 10; int b = 20; int ret = 0; ret=Add(a, b); printf("%d\n", ret);}

2017-12-27 16:34:03 216

原创 扫雷

用C语言写了一个简单的扫雷项目。实现了一下几个功能(1)布置雷(2)排雷(如果当前坐标不不是雷雷,当前坐标的周围也没雷雷,就会向外扩展搜索。)(3)踩雷,炸死(第一次踩雷不被炸死)(4)排雷成功判断实现原理:雷的信息存储和排查出来的信息存储,用二维数组来存储为了了实现⼀一个 9*9 的雷雷阵,我们需要创建⼀一个 11*11的数组 。(为了了⽅方便便统计雷雷区边上坐标周围

2017-12-23 18:37:02 412

原创 三字棋游戏

简单写了一个三字棋,实现了如下一些简单的功能。(1)棋盘的初始化(2)棋盘的打印(3)玩家下棋(4)电脑下棋(电脑可以对玩家下的棋堵)(5)判断输赢分为test.c(测试文件),game.c(游戏的实现函数),game.h(游戏的头文件)test.c#define _CRT_SECURE_NO_WARNINGS 0#include"game.h"void menu(){ prin

2017-12-23 17:47:46 945

原创 浅谈C语言操作符

C语言操作符分类:算术操作符移位操作符位操作符 单目操作符关系操作符逻辑操作符条件操作符逗号表达式下标引用、函数调用和结构成员1.算术操作符+   -   *   /    %(1)/操作符,若两边的操作数都为整数则执行整数运算;若两边操作数只要有一个为浮点数则执行浮点数除法。例如:5/2=2;若想得到2.5就要写成5.0/2=2.5。

2017-11-24 16:29:32 179

空空如也

空空如也

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

TA关注的人

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