自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [C/C++]详解STL容器9-基于红黑树模拟实现map和set

本文基于红黑树模拟实现map和set,首先对之前模拟实现的红黑树做了一些改造,之后对map和set做了模拟实现。

2021-12-05 20:04:01 13586 4

原创 [C/C++]详解STL容器8-map、multimap、set、multiset的介绍和使用

本文介绍了map、multimap、set、multiset以及使用方法。

2021-12-02 22:02:24 4459 6

原创 [C/C++]详解STL容器7--红黑树的介绍及部分模拟实现

本文对红黑树进行了介绍,并对其核心功能进行了模拟实现。红黑树(Red Black Tree),是在计算机科学中用到的一种数据结构,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。

2021-12-01 17:36:50 7425

原创 [C/C++]详解STL容器6--AVL树的介绍及部分模拟实现

本文对AVL树进行了介绍,并对其核心功能进行了模拟实现。二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。

2021-11-22 00:32:20 12551 1

原创 [C/C++]详解STL容器5--二叉搜索树的介绍及模拟实现

本文对二叉搜索树进行介绍,并对其核心功能进行了模拟实现。

2021-11-18 22:59:53 4208 7

原创 [OS-Linux]详解Linux的进程间通信2------system V共享内存(Shared Memory)

本文详解了通过共享内存进行进程间通信的方法,并对消息队列,信号量做了简单介绍。另一种进程间通信--管道,见前文:[OS-Linux]详解Linux的进程间通信1------管道_RMA515T的博客-CSDN博客管道通信本质是基于文件,OS没有过多的设计。system V进程间通信是OS特地设计的通信方式,让不同进程看到同一份资源。system V进程间通信包括了共享内存、消息队列、信号量。共享内存与消息队列以传输数据为目的,信号量则是保证进程的同步与互斥设计的,属于通信的范畴。目录一、

2021-11-09 23:24:33 13907 10

原创 [OS-Linux]详解Linux的进程间通信1------管道

本文详解了Linux中进程间通信,包括了进程间通信的介绍,匿名管道和命名管道。目录一、进程间通信的介绍1. 进程间通信目的2. 进程间通信分类二、管道1. 管道是什么2. 匿名管道 (1)pipe(2)实现(3)用fork来共享管道原理(4)从文件描述符角度理解管道(5)在内核角度理解管道3.管道读写规则4.管道特点一、进程间通信的介绍进程在运行时是具有独立性的,进程间通信一般要借助OS的资源。本质就是“数据拷贝”1....

2021-11-07 20:09:05 3671 12

原创 [OS-Linux]详解Linux的文件系统、inode和动静态库

gcc main.c -L. -lmymath本文详解了Linux中的文件系统,包括inode、软连接,硬链接、动静态库。一、理解文件系统使用ls -l的时候看到的除了看到文件名,还看到了文件元数据。每行包含7列,分别是:模式 硬链接数 文件所有者 组 大小 最后修改时间 文件名ls -l读取存储在磁盘上的文件信息,然后显示出来除了通过这种方式来读取,还有一个stat命令能够看到更多信息。下面对其中几个信息进行解释。二、inode下图为...

2021-10-28 17:01:58 15408 22

原创 [C/C++]详解C++的多态

本文详细介绍了C++中的多态,从多态的定义,到多态的原理。目录一、多态的定义及实现1.多态的构成条件2.虚函数3.虚函数的重写4.虚函数重写的例外(1)协变(2)析构函数的重写5. C++11中override 和 final(1) final(2)override6. 重载、覆盖(重写)、隐藏(重定义)二、抽象类1. 概念2. 接口继承和实现继承三、多态的原理1. 虚函数表2. 多态的原理3.动态绑定与静态绑定四、单继承...

2021-10-24 15:04:09 7053 13

原创 [OS-Linux]详解Linux的基础IO (1) ------- 文件描述符fd

本文由文件IO相关操作的一些操作,进一步详解了文件描述符fd,重定向。一、C语言中的文件I/O操作首先来回顾一下C语言中的文件I/O操作[C/C++]C语言中对文件的操作方法_RMA515T的博客-CSDN博客之前的博客中就有详细的介绍。这里就只做简单演示。#include <stdio.h>int main(){ FILE *fp = fopen("zht2", "w+"); if(!fp) { printf("erroe"); r.

2021-10-13 10:53:43 9207 8

原创 [OS-Linux]详解Linux基础开发工具

本文基于CentOS,详细介绍了Linux下的几种开发工具的使用,包括vim,gcc/g++,gdb、Makefile。目录一、Linux编辑器-vim1. vim的基本概念正常/普通/命令模式(Normal mode)插入模式(Insert mode)末行模式(last line mode)2. vim的基本操作3. vim正常模式命令集插入模式从插入模式切换为命令模式移动光标删除文字复制撤销上一次操作更改跳至指定的行4. vim末行模.

2021-10-05 13:13:02 3804 7

原创 [OS-Linux]详解Linux进程控制

本文基于CentOS,深入解释进程的创建,进程等待,进程程序替换,进程终止,shell运行原理,做简单的shell。一、进程创建1. fork函数在linux中fork函数它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。#include <unistd.h>pid_t fork(void);返回值:自进程中返回0,父进程返回子进程id,出错返回-1进程调用fork,当控制转移到内核中的fork代码后,内核会进行: (1)分配新的内存块和内...

2021-10-03 15:21:01 9557 18

原创 [OS-Linux]详解Linux的进程2(进程的优先级,环境变量,程序地址空间,进程地址空间,进程调度队列)

本文基于CentOS,深入解释进程的优先级,环境变量,程序地址空间,进程地址空间,进程调度队列。目录一、进程优先级1.基本概念2.查看系统进程3. PRI && NI4.其他概念二、环境变量1. 基本概念2. 常见环境变量3. 查看环境变量方法4. 和环境变量相关的命令5. 环境变量的组织方式6. 通过代码如何获取环境变量7. 通过系统调用获取或设置环境变量8. 环境变量通常是具有全局属性的三、程序地址空间1.程序地址空间.

2021-10-02 15:44:40 9454 16

原创 [OS-Linux]详解Linux的进程1(进程概念、PCB、进程创建,进程状态,僵尸进程,孤儿进程)

本文基于CentOS,由冯诺依曼系统,操作系统概念,深入解释进程概念,PCB。一、冯诺依曼体系我们常见的计算机大部分都遵守冯诺依曼体系。二、操作系统(Operator System)任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:内核(进程管理,内存管理,文件管理,驱动管理)其他程序(例如函数库,shell程序等等)设计OS的目的是与硬件交互,管理所有的软硬件资源,为用户程序(应用程序)提供一个良好的执...

2021-10-01 19:39:05 1937 7

原创 [OS-Linux]详解Linux的权限

本文基于CentOS,详解介绍了Linux权限的管理,chmod,chgrp以及粘滞位。一、用户Linux下有两种用户:超级用户(root)、普通用户。超级用户:可以再linux系统下做任何事情,不受限制,命令提示符是“#”。普通用户:在linux下做有限的事情,普通用户的命令提示符是“$”。命令:su [用户名]功能:切换用户。从root到普通用户user,则使用 su user。要从普通用户user切换到root用户则使用 su root(root可以省略)。二、Li...

2021-09-30 11:25:43 3050

原创 [OS-Linux]Linux的常用命令2

本文主要以CentOS为例,介绍了一些Linux常用命令。目录15.时间相关的指令16.Cal指令17.find指令: -name​18.grep指令20.tar指令21.bc指令:​22.uname –r指令:​23.关机24.其他常用续[OS-Linux]Linux的常用命令1_RMA515T的博客-CSDN博客15.时间相关的指令date显示date 指定格式显示时间: date +%Y:%m:%ddate 用法:date [OPTI...

2021-09-29 13:25:35 4632 3

原创 [OS-Linux]Linux的常用命令1

本文主要以CentOS为例,介绍了Linux的基础,以及、、、等命令一、Linux的简介Linux是一种自由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯托瓦兹在1991年发布,之后,在加上用户空间的应用程序之后,就成为了Linux操作系统。严格来讲,Linux只是操作系统内核本身,而CentOS是是一款企业级Linux发行版。这里需要注意,在Linux中一切皆文件,包括普通文件、显卡、网络等等都是文件,这一点十分重要!Linux的目录结构和文件组织形式是以多叉树的形式组织的,保

2021-09-28 22:10:59 2518 7

原创 [C/C++]详解C++中的继承

本文从继承的概念及定义开始,介绍了基类和派生类对象赋值转换,继承中的作用域,派生类的默认成员函数,继承与友元的关系,继承与静态成员的关系,复杂的菱形继承及菱形虚拟继承。目录一、继承的概念1.概念2.继承定义二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元、静态成员六、复杂的菱形继承及菱形虚拟继承1.菱形继承2.虚拟继承解决数据冗余和二义性的原理七、继承和组合一、继承的概念1.概念面向对象程序设计中最重要的一个..

2021-09-27 21:34:44 2725 9

原创 [C/C++]C++的IO流

本文对比了C语言的输入与输出,介绍了流的概念、C++IO流以及stringstream。目录一、C语言的输入与输出二、C++中流的概念三、C++IO流1.C++标准IO流2. C++文件IO流四、stringstream一、C语言的输入与输出C语言中我们最长用到的输入输出方式就是scanf ()与printf()。scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。...

2021-09-26 22:30:08 1760 4

原创 [C/C++]详解C++中的模板

本文主要介绍了非类型模板参数、类模板的特化、类型萃取、模板的分离编译。在之前的文章中已经对模板进行基本的介绍[C/C++]浅析C++中的模板_RMA515T的博客-CSDN博客_c++中模板目录一、非类型模板参数二、类模板的特化1.概念2.函数模板特化3.类模板全特化4. 类模板偏特化三、模板的分离编译四、模板总结一、非类型模板参数模板参数分类类型形参与非类型形参。类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名...

2021-09-26 11:16:39 2167 3

原创 [C/C++]详解STL容器4--stack、queue和priority_queue的功能和模拟实现,deque和容器适配器的介绍

本文介绍了stack、queue和priority_queue的常用接口的使用,并对其进行了模拟实现,还对deque和容器适配器进行了介绍。一、stack的功能和模拟实现1.stack的介绍stack<T>容器适配器中的数据是以 LIFO 的方式组织的,是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底

2021-09-25 11:33:05 2540 3

原创 [C/C++]详解STL容器3--list的功能和模拟实现(迭代器失效问题)

本文介绍了list的常用接口的使用,并对其进行了模拟实现,包括list迭代器的实现。目录一、list的介绍二、list的常用接口的使用1. list的构造2. list iterator的使用3.list capacity的使用4.list element access5.list modifiers6. list的迭代器失效三、list与vector的对比四、list的模拟实现一、list的介绍list 容器,又称双向链表容器,即该容器的底层是以双向链表

2021-09-24 10:22:56 4399 14

原创 [C/C++]详解STL容器2--vector的功能和模拟实现(迭代器失效,memcpy拷贝问题)

本文介绍了vector类的常用接口的使用,并对其进行了模拟实现,对模拟实现中涉及到的迭代器失效问题,memcpy拷贝问题进行了解析。一、vector类向量(Vector)是一个封装了动态大小数组的顺序容器(SequenceContainer)。在C++中,vector 是一个十分有用的容器。它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。就像数组vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector.

2021-09-23 16:33:51 5012 11

原创 [C/C++]详解STL容器1--string的功能和模拟实现(深浅拷贝问题)

本文介绍了string类的常用接口的使用,并对其进行了模拟实现,对模拟实现中涉及到的深浅拷贝问题进行了解析。目录一、string类1. C语言中的字符串2. C++中的string类二、string类的常用接口的使用1. string类对象的常见构造2. string类对象的容量操作3. string类对象的访问及遍历操作4.string类对象的修改操作5. string类非成员函数6.使用实例三、模拟实现1. sring类的深浅拷贝问题2. ...

2021-09-22 11:27:39 4980 3

原创 [数据结构]八大排序算法(C语言)

概述排序:给定一个元素序列,按照每个元素的关键码将元素重新排列,使关键码从小到大(正序)或从大到小(逆序)排列。排序可根据是否将全部元素放入内存分为内部排序和外部排序。内部排序:数据元素全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[

2021-06-13 19:05:48 19883 23

原创 [C/C++]详解C++的类和对象

类是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。对象是具有类类型的变量。类和对象是面向对象编程技术中的最基本的概念。1.面向对象首先来理解什么是面向对象编程。C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。2.类的引入在C++中的结构体内不仅可以定义变量,也可以定义函数。在C++中常用class来代替structstruct Stud

2021-06-07 14:45:53 34003 25

原创 [MachineLearning]模型评估与模型选择

机器学习

2021-06-06 23:46:41 28933 3

原创 [C/C++]浅析C++中的模板

本文将对C++中的模板进行简单介绍,明确一些基本概念。模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。

2021-06-05 10:42:44 25827 6

原创 [C/C++]C++中的内存管理

1.C++的内存管理2. 动态内存管理方式3.operator new与operator delete函数4.new和delete的实现原理

2021-06-03 23:21:49 11619 17

原创 [C/C++]C++的命名空间,缺省参数,引用,auto关键字,内联函数等

本文主要梳理了C++当中一些琐碎的知识点,包括有命名空间,缺省参数,引用,auto关键字和内联函数。命名空间当我们有两个名字相同的同学时,为了明确区分它们,我们在使用名字之外,还会使用一些额外的信息,比如籍贯等等。在C++ 中可能会写一个名为 ADD() 的函数,而在另一个可用的库中也存在一个相同的函数 ADD()。编译器就无法判断是哪一个 ADD() 函数。所以引入了命名空间这个概念。变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的

2021-05-21 13:56:31 9779 9

原创 [C/C++]详解C++的函数重载

什么是函数重载在自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。比如:一个经典段子,阿呆给领导送红包时,领导:“你这是什么意思?” 阿呆:“没什么意思,意思意思。” 领导:“那我就不好意思了。” 阿呆:“是我不好意思。” 领导:你肯定有什么意思。 阿呆:真的没有什么意思。 领导:既然没有什么意思,那你是什么意思? 阿呆:其实,我的意思就是想意思意思。上面这个段子中的 ” 意思 “ 就是一个重载词。函数重载的概念函数重载: 是函数的一种特殊情况

2021-05-19 16:33:57 19670 14

原创 [数据结构]栈和队列的几个简单OJ(括号匹配问题,用队列实现栈,用栈实现队列,设计循环队列)

本文主要是几个OJ题的思路和代码(C实现)包括:括号匹配问题,用队列实现栈,用栈实现队列,设计循环队列1.括号匹配问题 题目:给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。 思路:在栈中存放左括号,遇到右括号,则出栈顶元素,判断栈顶元素是否和当前括号匹配,如果不匹配,则说明不匹配。遍历完所有字符,如果栈为空,则表示完全匹配。 源码:(包括了栈的...

2021-04-22 17:10:54 2080 1

原创 [数据结构]C语言对顺序表的接口实现(增删查改)

线性表是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构。顺序表则是线性表的一种,是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般可以分为: 1. 静态顺序表:使用定长数组存储。#define N 100typedef struct SeqList{ SLDataType array[N]; // 定长数组 size_t size; // 有效数据的个...

2021-03-31 17:13:22 21302

原创 [C/C++]C语言的程序环境和预处理

本文主要讲述C语言的程序环境和预处理。一、程序的翻译环境和执行环境 存在源代码转换为可执行的机器指令的翻译环境和实际执行代码的执行环境,两个不同的环境。 1.翻译环境 每个源文件通过编译过程分别转换成目标代码,每个目标文件由链接器捆绑在一起形成可执行程序。过程图解如图: 编译本身也分为下面几个阶段: VIM编译期间的每一步: (1) 预处理 选项gcc -E...

2021-03-27 22:24:16 9973

原创 [C/C++]C语言中对文件的操作方法

C语言中有许多对文件的操作方法,首先我们要明确一些概念,在程序设计中,我们一般谈的文件有两种:程序文件、数据文件。文件名:一个文件要有一个唯一的文件标识,以便用户识别和引用。文件名包含3部分:文件路径+文件名主干+文件后缀文件类型:根据数据的组织形式,数据文件被称为文本文件或者二进制文件。(存储同样大小的数据,二进制文件大小小于文本文件原因如图)文件缓冲区:ANSIC 标准采用“缓冲文件系统”处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块

2021-03-27 18:43:23 14738 3

原创 [C/C++]C语言内存开辟,回收及柔性数组

以前使用的静态存储方式开辟空间如: int vvv = 100; char arrr[20];上述方式有两个特点: 1. 空间开辟大小是固定的。 2. 数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是我们对于空间的需求,有时不只是上面的情况。我们需要的空间大小在程序运行的时候才能知道,那这种编译时开辟空间的方式就不能满足了。这时就应该使用动态内存开辟。一、动态内存函数的介绍 1.malloc C语...

2021-03-26 23:13:33 2666 1

原创 [C/C++]c语言实现简单通讯录(动态内存)

设计目标:写一个通讯录,每个人的信息包括:1.名字,2.年龄,3.性别,4.电话,5.住址 //功能:1. 增加一个人的信息 2. 删除一个指定的联系人 3. 查找一个指定的联系人 ...

2021-03-25 23:59:07 23535

原创 [C/C++]C语言中的自定义类型(结构体,枚举,联合)

之前的文章中介绍了C语言中的数据类型,本文将介绍C语言中的自定义类型包括结构体、枚举、联合。一、结构体 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.结构体的声明 (1)标准的声明格式:struct tag{ member-list;}variable-list; 如一个通讯录的结构体:struct Address //通讯录{ char name[20];...

2021-03-24 14:54:26 29051

原创 [C/C++]C语言中字符相关的库函数的模拟实现

本文主要介绍处理字符和字符串的库函数的功能及模拟实现。1.对库函数按照功能可分为以下几类: (1)求字符串长度:strlen; (2)长度不受限制的字符串函数:strcpy、strcat、strcmp; (3)长度受限制的字符串函数:strncpy、strncat、strncmp; (4)字符串查找:strstr、strtok;...

2021-03-23 17:53:55 9643 1

原创 [C/C++]C语言中数据在内存中的存储

1. 数据类型:类型可以归类为 整形家族(包括int,long,short,long long,char); 浮点数家族(包括float,double); 构造类型(数组类型;结构体类型 struct;枚举类型 enum;联合类型 union); ...

2021-03-14 17:54:28 16169 29

空空如也

空空如也

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

TA关注的人

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