自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 快速理解“闭包”

看了好多讲解,大部分都是从官方的概念上绕来绕去。。甚至于有些讲解的易懂程度还不如维基百科。在通过各种方法,最终勉强算是理解之后,我觉得还是写一个小小的博客,方便自己回顾,也方便一下和我一样赶鸭子上架的小伙伴们。

2023-07-19 14:44:00 462

原创 Android之Intent

一个意图(Intent)对象包含了目标组件、动作、数据、类别、附加数据、标志六个部分。

2023-07-16 16:23:09 1092

原创 C++之初识多态(Visual Studio 2019)

此文章关于多态的代码全部是使用Visua Studio2019 (x86) 实现的,C++多态在不同编译器中的实现细节可能不同,所以部分情况下相同代码运行结果可能不同,在此声明。目录多态的概念多态的定义与实现虚函数虚函数的重写虚函数重写的两个例外C++11 override & final重载&重写&重定义纯虚函数及抽象类接口继承与实现继承多态的原理虚函数存在哪里?虚表存在哪里?多态的原理动态绑定与静态绑定多继承下的虚函数表就像 “叫” 这个行为,猫来完成时其叫声是 “喵喵喵” ,而狗则是 “汪汪汪”。还有

2022-07-06 16:38:54 914 6

原创 C++之虚拟继承与继承的小总结

本来是想将虚拟继承的部分写在上一篇的,但是虚拟继承的分析实在有些复杂,为了方便我自己回顾,就干脆单写一篇吧。我们之前说过了,虚拟继承可以解决菱形继承的二义性以及数据冗余的问题,实际上它也就是因为这些问题而诞生的。我们就以一个结构最简单的菱形继承为例:当不使用虚拟继承时:可以很直观地看到类A的成员变量a在类C的对象c中存在了两份,并且,很明显这两份又分别存储于对象c中类B1与类B2成员变量所在的空间。也即: 当使用虚拟继承时:再次查看内存对象成员模型,可以看到,之前重复继承的类A的成员变量被存储到

2022-06-12 13:10:13 335

原创 C++之继承初识(不包含虚拟继承)

C++是一种面向对象的语言,而面向对象,有着三大特征——封装,继承,多态。关于封装,在我的其它博客中已经有过简单的介绍了。这里我将简单叙述一下面向对象的三大特征之二——继承。什么是继承继承机制是面向对象程序设计中,使代码复用的最重要手段,它允许设计者在保持原有类的特性的基础上进行扩展,增加功能。通过这种方法产生的新的类,被称为派生类;被继承的类。则称为派生类的基类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。继承是类设计层次的复用。继承的定义格式.

2022-06-11 21:16:46 399

原创 猴子分桃问题

链接:猴子分桃__牛客网来源:牛客网老猴子辛苦了一辈子,给那群小猴子们留下了一笔巨大的财富——一大堆桃子。老猴子决定把这些桃子分给小猴子。第一个猴子来了,它把桃子分成五堆,五堆一样多,但还多出一个。它把剩下的一个留给老猴子,自己拿走其中的一堆。第二个猴子来了,它把桃子分成五堆,五堆一样多,但又多出一个。它把多出的一个留给老猴子,自己拿走其中的一堆。后来的小猴子都如此照办。最后剩下的桃子全部留给老猴子。这里有n只小猴子,请你写个程序计算一下在开始时至少有多少个桃子,以及最后老猴子最少能得到几个桃子

2022-05-28 14:59:12 902

原创 正数数组的最小不可组成和

链接:正数数组的最小不可组成和__牛客网来源:牛客网给定一个正数数组arr,其中所有的值都为整数,以下是最小不可组成和的概念把arr每个子集内的所有元素加起来会出现很多值,其中最小的记为min,最大的记为max 在区间[min, max]上,如果有数不可以被arr某一个子集相加得到,那么其中最小的那个数是arr的最小不可组成和 在区间[min, max]上,如果所有的数都可以被arr的某一个子集相加得到,那么max+1是arr的最小不可组成和请写函数返回正数数组arr的最小不可组成和.

2022-05-28 10:10:39 161

原创 网络套接字

IP地址端口号初识TCP协议TCPTransmission Control Protoco传输控制协议TCP是传输层协议,它具有有连接,可靠传输 以及 面向字节流 的特点。有连接:TCP双方在发送数据之前会先“握手”以建立连接。以此确保对方可以正常进行通信,并且沟通双方发送后数据的细节,如序号等。可靠传输:TCP保证传输的数据是可靠的,数据有序的到达对面。面向字节流:虽然应用层与TCP的交互是一次一个数据块,但是TCP只是将应用层传输过来的数..

2022-05-24 13:24:14 873

原创 非递归前序遍历,中序遍历以及后序遍历

对于二叉树的前序遍历,中序遍历以及后序遍历的非递归解法,通常会引入一个栈用来存储二叉树中的节点。

2022-05-21 15:46:16 1533

原创 从中序与后序遍历构造二叉树

给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗二叉树。示例 1:输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]输出:[3,9,20,null,null,15,7]来源:力扣(LeetCode)链接:https://leetcode.cn/problems/construct-binary-tr...

2022-05-19 14:19:19 643

原创 错题汇总3

忙死了,忙死了,忙死了

2022-05-15 17:37:41 282

原创 幸运的袋子

幸运的袋子——它使我不幸——由于在这里卡了太长的时间,我的计划全泡汤了。题目描述:链接:幸运的袋子__牛客网来源:牛客网一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的.

2022-05-09 22:52:52 257

原创 分割回文串

这道题是leetcode编号131,在剑指offer中也有本题。给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。示例 1:输入:s = "aab"输出:[["a","a","b"],["aa","b"]]示例 2:输入:s = "a"输出:[["a"]]提示:1 <= s.length <= 16s 仅由小写英文字母组成来源:力扣(LeetCode)

2022-05-09 08:58:35 1391

原创 STL六大组件

前两天有一门考试,忙着复习,便有些懈怠了。也趁着清闲想了想感觉还是有必要把对STL整体来上一篇博客介绍一下的。STL首先,什么是STL?STLstandard template library标准模板库STL是C++标准库的重要组成部分,它不仅是一个可以复用的组件库,更是一个包罗万象的数据结构与算法的软件框架。STL主要有六大组件:容器、算法、迭代器、仿函数、适配器、空间配置器。简单介绍容器:( containers )STL内部封装好的数据结构,从实现的角度来看,

2022-05-06 17:19:49 548

原创 string类的部分实现

可能会有讲解,但肯定不在本篇。今天没有学习的欲望。太多了,我甚至都没有测试完。#pragma once #include <iostream>#include <cstring>#include <cstdlib>#include <cassert>using std::ostream;using std::istream;using std::cin;using std::cout;using std::endl;na.

2022-05-03 20:31:32 219

原创 C++之模板

虽然C++中引入了函数重载的功能,使得我们可以在同一作用域中声明并定义几个参数列表不同的同名函数。

2022-05-02 13:54:08 1063

原创 #左值右值粗解

只是忽然被卡到这个概念了,做一个简单总结。后边推进到左值引用右值引用可能会好好讲一下。

2022-05-02 11:07:42 128

原创 sizeof与strlen的区别

2022-05-01 13:22:42 304

原创 简单了解malloc的实现原理

想要进一步提升自己内存管理方面的理解,通过各种手段了解一下C语言提供的最基础的内存管理函数malloc的底层实现绝对是一个不错的方法。

2022-05-01 11:31:10 296

原创 C++动态内存管理

C/C++与Java,python最大的差别就在于C/C++需要用户自己来进行内存管理。内存管理可以带给C/C++大神更高的性能,更大的自由,带给萌新更多的BUG,更秃的头。

2022-04-30 22:26:13 1858

原创 错题汇总2

1.下列程序的打印结果是?char p1[15]= "abcd",*p2= "ABCD", str[50]= "xyz";strcpy(str+2,strcat(p1+2,p2+1));printf("%s",str);A xyabcABB abcABz C ABabcz D xycdBCD E 运行出错解析:这道题实际上我并没有做错,但感觉这个知识点记得并不是很牢靠,不敢保证下一次也不会错,所以记之。strcpy(a, b):将字符串b中的内容拷贝到a所在.

2022-04-28 15:53:34 1151

原创 C++类与对象收官

关键字:自加自减运算符重载,初始化列表,explicit关键字,static成员,内部类。自加自减运算符重载与其他的运算符不同,自加运算符与自减运算符是所有运算符中的一对奇葩——它们都只对一个对象进行操作,但是却又有两种不同的操作模式——前置与后置。这里我们以自加运算符为例。我们假设d1是date类的一个对象,那么++d1与d1++应该是不一样的,它们虽然都完成了d1 = d1 + 1//=与+运算符都已经重载这样的操作,但是,前者的返回值应该是对象d1被修改后的值,而后者的

2022-04-27 19:51:42 940

原创 C++类与对象再探

关键字:const成员函数,构造函数,析构函数,拷贝构造函数,赋值操作符重载,取地址重载,const取地址重载。const成员函数在C语言中有一个神奇的关键字,const关键字。它用以给其所修饰的变量赋以常性,即:const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。(C)关于const的各种各样的用法在这里就不细讲了,有时间的话单独总结一篇博客(flag + 1)。这里我们只讨论const修饰类的成员函数。如上所言,const最重要的特征在于——常性

2022-04-23 20:09:11 1502 2

原创 错题汇总1

总结,是为了查漏补缺。在C语言中,多维数组初始化时,只有第一维可以省略。写摘要这,提醒自己,欸嘿。

2022-04-22 19:16:25 1465

原创 C++类与对象之初识

关键字:类的引入,类的定义,访问限定符,类的作用域,类的实例化,类的大小计算,this指针

2022-04-20 11:55:20 544

原创 初识面向对象与面向过程

C语言与C++的差距应该从它们解决问题的思想上的差别讲起——面向过程与面向对象。面向过程:面向过程是一种最实际最基础的思考方式。面向对象的思想是把问题分解成为一个一个步骤,然后将每个步骤用函数实现,依次调用。...

2022-04-18 18:28:36 176

原创 C++之苦海无涯

所谓苦海无涯,回头是岸。关于C++的零散的基础的知识点,再往后,就真的是入门级别了。关键字:内联函数,auto关键字,范围for循环,指针空值nullptr。

2022-04-18 14:56:25 391

原创 简单了解函数调用过程

绝大多数C/C++程序是由一个个函数组成的。我们的程序执行主要做的就是执行组成它的一个个函数。而每一个函数想要执行的时候,编译器都会给它分配一块栈空间。这块栈空间主要用来存储这个函数在执行过程中使用到的局部变量、参数等等。这块栈空间往往被称之为栈帧。每个栈帧对应着一个未运行完的函数。从逻辑上讲,栈帧就是函数执行的环境,其内包含着函数的参数、函数的局部变量、函数执行完成后返回到哪里等等。int add(int a, int b) { int ret = a + b; re

2022-04-17 16:39:48 4072 2

原创 C++之引用

工具为了解决问题而创造出来,不要为了制造工具而制造工具。

2022-04-16 17:24:31 856

原创 以C的风格编译C++函数

在实际应用中,有时候可能为了兼容性等多半考量,可能需要将某些函数以C语言的风格来进行编译。C语言与C++在函数编译时的主要差距在于C++在编译时对于函数名会进行更加复杂的修饰,而C语言只是简单的在函数名前加上一个下划线“_”,这也是为什么C++支持函数重载而C语言不支持。在C++代码中,我们可以通过extern "C"来指定一段代码使用C语言风格进行编译。很容易看出的,extern "C" 由 extern 与 "C" 两个部分组成。extern对C语言或C++有过了解的朋友都

2022-04-15 16:10:02 461

原创 C++之函数重载

简单介绍了一下函数重载,大致讲解了一下Linux与VisualStudio中函数名修饰规则。

2022-04-14 20:36:19 684

原创 大概了解预处理、编译、汇编、链接

加入光荣的进化吧!

2022-04-14 18:24:48 569

原创 C++入门之开胃小菜

关键词:命名空间,cout(标准输出流),cin(标准输入流),缺省参数。本文章对cout,cin,缺省参数浅尝辄止。

2022-04-13 19:18:56 653 1

原创 交流的需要——进程间通信

进程间通信为什么要进行进程间通信我们都知道,每一个进程的数据都是存储在物理内存之中的。进程通过各自的进程虚拟地址空间,经过各自页表的映射关系,对物理内存进行访问。以32位的操作系统为例,32位操作系统的内存最大为4G,操作系统给每个进程都画了一张4G的大饼(进程虚拟地址空间),每个进程都以为自己有4G的空间,而实际上是操作系统在后方精打细算,管理着数据的存储以及页表的映射。进程只需要单纯地执行代码即可,这便保证了进程间的独立性。进程是一个独立的资源分配单元,通常情况下,进程之...

2022-04-12 14:28:49 1907

原创 简单了解一下Linux文件系统

好奇是进步的第一步。

2022-04-03 11:45:02 892

原创 不仅仅是程序本身——基础IO

关键字:C语言文件接口,系统调用文件接口,文件描述符,重定向,静态库与动态库,软链接与硬链接。

2022-03-30 22:39:19 396 3

原创 一个进程的一生

关键词助手:进程创建,进程终止,进程等待,进程程序替换。进程控制进程创建父子进程从一个已存在进程中创建一个新进程。新的进程为子进程,而原进程为父进程。创建子进程的方法——fork函数fork用于创建一个新的进程,调用fork()的进程被称为父进程,而被fork()创建的进程被称为子进程。创建新的子进程后,两个进程将执行fork()系统调用之后的下一条指令。子进程使用相同的程序计数器,相同的CPU寄存器,在父进程中使用的相同打开文件。#include <unistd

2022-03-25 23:50:20 750 3

原创 进程虚拟地址空间

关键词:进程虚拟地址空间,进程描述符,页表,分段式,段页式。在进入正式的内容之前,我们先了解一个重要的概念——进程描述符PCB。在Linux操作系统中,描述进程的结构体叫做task_struct。Linux操作系统通过task_struct感知进程的存在。task_struct结构体中的内容:标识符:描述本进程的唯一标识符,又来区别本进程与其他进程。状态:进程的状态,退出信号等等优先级:相对于其它进程的优先级。程序计数器:存储着程序中下一条将要执行的指令的地址。内存指针

2022-03-16 20:59:05 2738 2

原创 那些年,那些排序

关键词助手:排序,冒泡排序,快速排序(hoare版、挖坑法、前后指针法),快速排序非递归,选择排序,堆排序,插入排序,希尔排序,归并排序,计数排序。

2022-03-15 15:21:26 100 1

原创 &&短路评估实战——限定条件下的加和(出自剑指offer)

求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。首先,我们要了解文章标题中的短路评估的含义:在一个A&&B的判断中,如果前者的布尔值为false,那么则会跳过对B的判断。PS.暂时找不到官方的文字。我们可以用&&的这个特性来完成本该由if语句完成的功能。class Solution {public: int Sum_Solution(int n.

2022-02-12 10:31:25 216

空空如也

空空如也

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

TA关注的人

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