- 博客(56)
- 收藏
- 关注
原创 C++强制类型转换
C++强制类型转换的四个关键字static_castconst_castreinterpret_castdynamic_caststatic_cast用于数据类型的强制转换,强制将一种数据类型转换为另一种数据类型。例如将整型数据转换为浮点型数据。用法:static_cast <type> (expression)它主要有如下几种用法:(1)基类和派生类之间指针或引用的转换进行上行转换(把派生类的指针或引用转换成基类表示)是安全的进行下行转换(把基类的指针或引用转换为
2021-08-09 20:26:14
522
原创 C++智能指针总结
为什么要有智能指针?因为普通的指针存在以下几个问题:资源泄露野指针未初始化多个指针指向同一块内存,某个指针将内存释放,别的指针不知道异常安全问题如果在 malloc和free 或者 new和delete 之间如果存在抛异常,那么也会导致内存泄漏。资源泄漏示例代码:int main(){ int *p = new int; *p = 1; p = new int; // 未释放之前申请的资源,导致内存泄漏 delete p; return 0;}野指针示例代
2021-08-09 20:04:52
956
1
原创 剑指 Offer 12. 矩阵中的路径
题目描述:给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。题目链接例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。示例 1:输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S.
2021-04-16 17:22:11
434
原创 剑指 Offer 07. 重建二叉树
题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。题目链接例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7二叉树的遍历及实现参考前序遍历性质: 节点按照 [ 根节点 | 左子树 | 右子.
2021-04-16 11:15:48
121
原创 剑指 Offer 10- II. 青蛙跳台阶问题 C++
题目链接题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7 输出:21示例 3:输入:n = 0 输出:1设跳上 n 级台阶有 f(n) 种跳法。跳到第 n 级有两种情况,从第 n-1 级台阶跳上来 跳到第 n-1 级台阶有 f(n-1) 种跳法从
2021-04-07 09:46:32
281
原创 剑指 Offer 10- I. 斐波那契数列 C++
题目链接题目描述: 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1示例 2:输入
2021-04-07 09:26:11
175
原创 剑指 Offer 09. 用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )题目链接示例 1:输入: [“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:[“
2021-04-06 11:32:45
121
原创 剑指offer 06. 从头到尾打印链表 C++
剑指offer 06. 从头到尾打印链表题目描述: 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。题目链接输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]方法一: 遍历链表, 元素存放在数组中, 最后倒转数组vector<int> reversePrint(ListNode* head) { // 方法一: 遍历链表, 元素存放在数组中, 最后倒转数组.
2021-04-06 10:58:08
228
原创 剑指offer 05. 替换空格 C++
剑指offer 05. 替换空格题目链接请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”方法一: 双指针原地修改 string replaceSpace(string s) { // 解法一: 双指针原地修改--------------------------------- int count = 0; i.
2021-04-06 10:49:05
98
原创 直方图的水量 力扣面试题 17.21.
记录力扣每日一题题目链接题目描述:给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的直方图,在这种情况下,可以接 6 个单位的水(蓝色部分表示水)示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6思路:左右视图,同一位置取较小值, 便是当前位置能够储水的最大高度, 最后在减去构成容器的直方图的高度,就是最终储水的结果int .
2021-04-02 11:01:31
1852
3
原创 gcc升级
CentOS 6/7 升级 gcc;升级作用:老旧版本存在一些bug, 比如 gcc 4.8版本的正则表达式,存在一定的bug, 如果使用了第三方库 cpp-httplib, 编译时通过,但运行时崩溃另外,C++11标准的程序都需要gcc 4.8以上版本的gcc编译器编译,如MySQL 8.0版本(8.0.16以上版本是C++14标准,需gcc 5.3以上版本)。通过 gcc --version 查看gcc 版本gcc --version升级到gcc 7.3:终端输入:yum -y ins
2021-04-01 21:00:09
1834
1
原创 总结学习二叉树4-二叉树的遍历
二叉树链式结构的遍历遍历(Traversal) 是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问 题。 遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。树结点结构代码:template<class T>struct BTNode { BTNode(T data = T()) : _data(data), _lchild(nullptr), _rchild(nullptr) {} BTNode<
2021-03-21 16:49:10
1282
5
原创 VS Code 报错: Failed to install Visual Studio Code update
VS Code 一直在提醒更新, 选择更新后, 报错:解决:将VS Code 安装目录下的 Code.exe 文件 复制到C:\Users\用户名\AppData\Local\Programs\Microsoft VS Code文件夹下
2021-03-18 20:06:34
20339
30
原创 记录word2019 mathtype加载项报错及安装
安装:百度网盘下载链接提取码:z1z4下载安装 MathType-win-en.exe 安装后不要打开双击注册表文件 MathType 7.reg 添加注册表打开word 一般可正常使用如果不能正常使用, 关闭word将安装目录下Office Support\64\MathType Commands 2016.domMathPage\64\MathPage.wll两个文件拷贝至C:\Users\你的用户名\AppData\Roaming\Microso
2021-03-17 11:09:19
1031
原创 总结学习二叉树3-二叉树基本概念
上一篇:树的三种表示方法二叉树特点:二叉树是树的特殊一种 (树的概念参考)每个节点最多有两颗子树,结点的度最大为2.左子树和右子树是有顺序的,次序不能颠倒.即使某个结点只有一个子树,也要区分左右子树.特殊的二叉树及特点:斜树:所有结点都只有左子树(左斜树)或右结点(右斜树)满二叉树:所有分支节点都存在左子树和右子树,并且所有的叶子结点都在同一层上.叶子只能出现在最下一层.非叶子结点度一定是2.在同样深度的二叉树中,满二叉树的结点个数最多,叶子树最多.
2021-03-13 12:05:45
250
原创 总结学习二叉树2-树的三种表示方法
树的表示树有很多表示方式,如:双亲表示法 取一块连续的内存空间,在存储每个结点的同时,各自都附加一个记录其父结点位置的变量。需要在树结构中频繁地查找某结点的父结点时,使用双亲表示法比较合适.代码表示:#define nodeNum 50typedef struct PNode{ int _data; //树中结点的数据类型 int _parent; //结点的父结点在数组中的位置下标}PNode;typedef struct { PNode _node[
2021-03-13 10:50:40
2151
原创 总结学习二叉树1-树的基本概念
二叉树的相关知识之前比较零碎的学习了一遍, 时间久了,对很多细节遗忘比较严重, 所以,详细总结一遍.1. 树1.1 树的概念 结点 数据结构的基础, 是构成复制数据结构的基本单位. 树是一种非线性的数据结构,它是由n(n>0)个有限节点组成的具有层次结构的数据集合.叫做树是因为看起来像一颗倒挂的树(根朝上,叶朝下).当结点个数n 为0时, 称为 空(NULL)树.任意一颗非空树具有以下特点:1.2....
2021-03-13 10:24:45
207
原创 C++类与对象
C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。1. 类的定义class className{ // 类体:由成员函数和成员变量组成}; // 注意有分号class为定义类的关键字,ClassName为类的名字遵循C++变量命名规则,{}中为类的主体,注意类定义结束时后面分号。类中的元素称为类的成员:类中的数据称为类的属性或者成员变量; 类中的函数称为类的方法或者成员函数。2.类的访问限定符C++用类将对象的属性与方法结合在一块,让对象更加完善.
2021-03-12 10:38:46
89
原创 最长公共子序列
题目: 我们有两个字符串m和n,如果它们的子串a和b内容相同,则称a和b是m和n的公共子序列。子串中的字符不一定在原字符串中连续。例如字符串“abcfbc”和“abfcab”,其中“abc”同时出现在两个字符串中,因此“abc”是它们的公共子序列。此外,“ab”、“af”等都是它们的字串。现在给你两个任意字符串(不包含空格),请帮忙计算它们的最长公共子序列的长度。示例1:输入 :abcfbc abfcabprogramming contestabcd mnp输出:420动态规划思想建
2021-03-11 22:49:59
139
原创 字符串计数
求字典序在s1和s2之间的,长度在len1到len2的字符串的个数,结果mod 1000007。输入描述:每组数据包涵s1(长度小于100),s2(长度小于100),len1(小于100000),len2(大于len1,小于100000)输出描述:输出答案。示例1输入:ab ce 1 2输出56// 字符串计数#include<iostream>#include<string>#include<vector>#include<algo
2021-03-11 22:09:46
133
原创 解决git连接问题: You‘ve successfully authenticated, but GitHub does not provide shell access.
问题: Hi z397318716! You’ve successfully authenticated, but GitHub does not provide shell access.git 向仓库推送代码失败所以使用命令查看是否和 GitHub 连接成功.命令:ssh -T git@github.com解决办法:重新生成 ssh key 将之前 GitHub 保存的秘钥删除(也可以直接添加新的,不用管之前的).生成 ssh key 命令:ssh-keygen -t rsa
2021-03-06 15:57:45
50362
22
原创 操作数及寻址方式
操作数是什么? 操作数是指 指令执行的操作所需要数据的来源。操作数是汇编语言指令的一个字段。例如: Mov AX 5678H操作数(AX 5678H)。在操作数这个字段中可以放操作数本身,也可以放操作地址,还可以放操作地址的计算方法。 通常一条指令均包含操作符和操作数。 简单理解: 操作就是+、-、*、/、逻辑运算&、|、~等等.那么操作数就是操作符相邻的变量或常量例如:a+ba、b就是操作数,+就是操作符 操作数是指令执行的参与者,也就是各种操作的对象与之有关的是操作码,,所
2021-03-06 10:12:55
24293
原创 mysql C API简单使用及例子参考
centos7 下通过yum 安装 mysql 点击这里参考mysql API 参考:1.初始化mysql句柄MYSQL *mysql init( MYSQL *mysql );通常参数为NULL,表示要动态分配一块空间进行初始化2.连接mysql服务器MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned
2021-03-02 22:07:55
256
原创 C/C++ const 总结 / const在函数前/后的作用
Const 是C++中常用的类型修饰符, 使用const 修饰的类型是 常类型,常类型的变量或对象的值是不能被改变的。const的作用:保护被修饰的变量, 防止意外修改, 增强程序的健壮性const定义常量从汇编的角度来看,只是给出了对应的内存地址,所以,const定义的常量在程序运行过程中只有一份拷贝,节省内存空间, 避免不必要的内存分配编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高使用co
2021-02-24 13:09:38
1171
原创 文件描述符总结
文件描述符总结什么是文件描述符默认的文件描述符文件描述符的分配原则什么是文件描述符Linux系统下, 一切皆文件在Linux操作系统中系统下, 可以把一切都看做是文件,包括普通文件, 目录文件,套接字等, 将一切都抽象成文件, 提供了统一的接口, 方便程序的调用。文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述
2021-02-06 18:18:31
1224
原创 C++实现string类
利用深拷贝和深赋值实现实现string类的接口在win64 VS2019环境 使用 strcpy函数,报错----使用宏#define _CRT_SECURE_NO_WARNINGS 避免简单测试时报错#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;class Mystring{public: Mystring(const char* str = nullptr); ~Mystring
2021-02-05 22:55:12
165
原创 C/C++内存管理总结
C/C++内存管理1. C/C++内存分布1.1堆和栈有哪些不同2. C/C++动态内存管理方式2.1 C语言动态内存管理函数2.1.1 malloc2.1.2 calloc2.1.3 reallocmalloc、calloc、relloc区别2.2 C++动态内存管理方式2.2.1 new/delete2.2.2 operator new / operator delete2.2.3 new / delete 原理1. C/C++内存分布C/C++ 程序中内存区域划分:操作系统的核心是内核(ker
2021-02-04 18:37:44
402
原创 C++友元函数、友元类
友元友元是一种定义在类外部的普通函数或类,需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend。友元提出的原因:类具有封装和信息隐藏的特性。只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的。非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为公有的,这又破坏了隐藏的特性。另外,在某些情况下,特别是在对某些成员函数多次调用时,由于参数传递,类型检查和安全性检查等都需要时间开销,而影响程序的运行效率。友元函数不是成员函数,但是它可以访问
2021-02-03 15:29:52
436
原创 static变量总结
static 是静态变量的类型说明符.static修饰局部变量----静态局部变量static 修饰的局部变量属于静态存储方式.static修饰局部变量,改变了该变量的生命周期,使该变量的生命周期与程序的生命周期相同,程序结束时才销毁.以代码为例,体会static修饰局部变量的作用:#include<iostream>void A1() { static int tmp = 1; static int tmp1; int ret = 1; std::cout <<
2021-02-03 14:18:25
6206
原创 日期类的实现
使用重载运算符(+,-,+=,-=,<,>等)实现日期类的操作。#include<iostream>#include<utility>class Date{public: // 全缺省的构造函数 Date(int year = 1900, int month = 1, int day = 1) :_year(year), _month(month), _day(day) { // 应当对传入的日期进行合法性判定 if (year < 0)
2021-02-02 20:29:05
321
原创 拷贝构造函数详解
拷贝构造函数拷贝构造函数是构造函数的一种, 也称复制构造函数, 只有一个参数, 参数类型是该类的引用.[拷贝构造函数的参数可以是 const 引用,也可以是非 const 引用。 一般使用前者,这样既能以常量对象(初始化后值不能改变的对象)作为参数,也能以非常量对象作为参数去初始化其他对象。一个类中可以同时存在这两种类型的拷贝构造函数(一个的参数是 const 引用,另一个的参数是非 const 引用)]。拷贝构造函数的作用:作用是使用类中已经创建好的对象来初始化新创建的对象拷贝构造函数的注意要点
2021-02-02 15:04:44
10217
3
原创 进程信号
1.进程信号概念信号是一个软件中断,通知进程某个事件发生了异步事件,打断进程当前的操作,去处理这个事件,信号是多种多样的,并且一个信号对应一个事件,这样才能做到进程收到一个信号后,知道是什么事件,应该如何去处理1.1 信号的查看使用 kill -l 命令查看信号种类信号种类62种,其中,1-31号信号都是非可靠信号(从unix借鉴而来,每个信号都有具体对应的系统事件,有可能会信号丢失)34-64号信号 都是可靠信号(没有具体对应的事件,不会丢失信号)这些信号各自在什么条件下产生, 默认的处理
2021-01-18 13:10:08
537
原创 进程间通信(IPC)2_共享内存_消息队列
进程间通信?因为每一个进程都有一个虚拟地址空间, 保证了进程的独立性, 但也正是因此导致进程间无法通信. 所以需要操作系统提供进程间通信方式, 又因为通信的场景不同, 所以提供了多种不同的进程间通信方式进程间通信的目的数据传输资源共享进程控制通知事件进程间通信方式:System V 标准的进程间通信方式:管道: 用于进程间的数据传输共享内存: 用于进程间的数据共享消息队列: 用于进程间的数据传输关于管道的相关知识和代码可以参考这篇文章共享内存顾名思义, 共享内存就是进程都能访问到
2021-01-17 13:46:17
280
原创 进程间通信(IPC)1_匿名管道理解
进程间通信?因为每一个进程都有一个虚拟地址空间, 保证了进程的独立性, 但也正是因此导致进程间无法通信. 所以需要操作系统提供进程间通信方式, 又因为通信的场景不同, 所以提供了多种不同的进程间通信方式进程间通信的目的数据传输资源共享进程控制通知事件进程间通信方式:System V 标准的进程间通信方式:管道: 用于进程间的数据传输共享内存: 用于进程间的数据共享消息队列: 用于进程间的数据传输信号量: 用于实现进程间的控制管道内核中的一块缓冲区,通过让多个进程都能访问到
2020-10-23 10:08:36
264
原创 天牛须搜索算法优化神经网络_matlab代码
BAS原理天牛须搜索算法(beetle antennae search,BAS)算法是2017年提出的一种基于天牛觅食原理的适用于多目标函数优化的新技术,其生物原理为:当天牛觅食时,,其并不知道食物在哪里,而是根据食物气味的强弱来觅食。天牛有两只长触角,如果左边触角收到的气味强度比右边大,那下一步天牛就会向左边飞,反之则向右飞。依据这一简单原理天牛就可以有效找到食物。与遗传算法、粒子群算法等类似,BAS 不需要知道函数的具体形式以及梯度信息,就可以自动实现寻优过程,且其个体仅为一个,寻优速度显著提高。算
2020-10-20 20:26:37
7786
8
原创 进程基本概念及简单操作1
进程进程概念进程信息的查看进程的创建子进程的创建进程的状态僵尸进程孤儿进程进程概念进程是什么:进程是系统进行资源分配和调度的基本单位.简单来理解进程就是系统中正在运行的程序;详细来说进程是操作系统对一个运行中程序的描述,通过这个描述信息,实现对程序的调度运行;[例如: 通过描述信息中的内存指针能够找到内存中运行的程序代码及数据,并且通过上下文数据可以保存程序切换调度时正在处理的数据, 以及通过程序计数器保存进程切换时即将执行的下一步命令等等…]操作系统对进程的控制是通过一个数据结构 PCB(
2020-09-08 22:46:23
262
原创 Android 开发环境的搭建
Android 开发环境在 Eclipse 中构建, 需要安装 开发工具 JDK() , SDk, 和ADT, 并配置JDK和SDK的环境变量. 下面依次演示它们的下载与安装方法:1. 下载JDK点此下载 JDK 安装包或者进入 Oracle 官网, 找到相关链接, 下载JDK安装包2. 安装JDkJDK安装包下载完成后, 双击安装程序图标, 进行安装.注意修改安装路径3. 配置Java环境变量JDK安装完成后, 需要进行环境变量的配置. 因为程序执行时不知道某些Java组件安装在哪里,
2020-06-06 17:35:48
241
原创 红黑树详细实现及性能分析
红黑树的提出:之前我们介绍了二叉搜索树, 理想情况下二叉搜索树的性能不错, 但是在极端情况下(数据有序, 或者接近有序)二叉搜索树会退化为单支树, 从而导致其操作效率很低, 时间复杂度为O(N), 于是俄罗斯数学家提出了平衡二叉搜索树,又称为AVL树. AVL树引入了平衡因子,保证了树的平衡, 从而避免了二叉搜索树会退化为单支树的情况, 进而使得AVL操作时间复杂度为log(N), 但是AVL的应用却比较少, 因为AVL的维护,成本太高,对AVL树进行插入或者删除时, 需要不停地通过左旋,右旋操作来维持其
2020-05-24 18:34:36
1150
原创 AVL树实现及其性能分析
AVL树的提出:二叉搜索树虽然可以缩短查找的效率, 但如果数据有序, 或者接近有序, 二叉搜索树将退化为单支树, 查找元素相当于在顺序表中搜索元素, 效率低下.二叉搜索树实现及其性能分析由此,1962年G.M.Adelson-Velskii和E.M.Landis两位俄罗斯数学家提出平衡二叉搜索树的方法: 当向二叉搜索树中插入新结点后, 保证每个结点的左右子树高度之差的绝对值不超过1(超过了则对树的结点进行相应的调整), 即可降低树的高度, 从而减少平均搜索长度.概念:一颗AVL树或者是空树, 或者
2020-05-17 17:55:16
1739
原创 二叉搜索树实现及性能分析
概念:二叉搜索树(Binary Search Tree),(又称:二叉查找树,二叉排序树):它或者是一颗空树,或者是一颗具有以下性质的二叉树:若它的左子树不为空, 则左子树上所有节点的值均小于根节点的值;若它的右子树不为空, 则右子树上所有节点的值均大于根节点的值;它的左右子树也为二叉搜索树;算法实现:二叉搜索树的操作主要有:1. 查找: 递归查找是否存在data.2. 插入:树为空, 直接插入, 返回true树不为空, 按照二叉搜索树的性质查找插入位置, 插入新节点3. 删
2020-05-13 10:50:40
1972
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人