- 博客(65)
- 收藏
- 关注
原创 C++右值引用
左值引用(T&)是C++98就有的特性,用于为已存在的对象创建别名。右值引用(T&&)是C++11新增的特性,用于为右值(即临时对象)创建引用,支持移动语义和完美转发等高级特性。右值引用的主要用途不是直接绑定到字面量或简单的右值表达式上,而是在函数参数和返回值中,以实现更高效的资源管理和更灵活的代码编写方式。
2024-09-22 14:46:03
454
原创 Linux环境变量详解&命令行参数
环境变量是操作系统中用于存储系统和用户信息的动态命名值。它们可以影响程序的行为和系统的运行方式。环境变量通常包含诸如系统路径、用户目录、配置设置等信息。例如:在我们编写C/C++程序时,在链接的时候,从来不知道我们的所链接的动静态库在哪里,但链接照样可以成功,生成可执行程序,原因就是有相关的环境变量帮助编译器进行查找。动态性:环境变量可以在程序运行时被修改,适应不同的运行环境。作用域:环境变量可以是全局的(对所有用户和进程可见)或局部的(仅对特定进程可见)。
2024-09-13 21:45:24
634
原创 Linux进程详解
基于/proc文件系统如上所述的特殊性,其内的文件也常被称作虚拟文件,并具有一些独特的特点。为了查看及使用上的方便,这些文件通常会按照相关性进行分类存储于不同的目录甚至子目录中,如/proc/scsi目录中存储的就是当前系统上所有SCSI设备的相关信息,/proc/N中存储的则是系统当前正在运行的进程的相关信息,其中N为正在运行的进程(可以想象得到,在某进程结束后其相关目录则会消失)。注意:当进程终止后,上述命令将无法找到原有进程,原进程已被销毁,/proc/目录下的对应文件夹也会被删除。
2024-09-08 17:11:31
909
原创 Linux下通过git命令来提交维护仓库
Linux git 命令进行远程仓库管理git commit -m “提交信息” (提交到本地)当前目录下所有未被添加的文件进行添加(暂存区)正式使用Git前,需要一些全局设置。
2024-09-03 13:41:08
469
原创 Linux实现进度条小程序——缓冲区
回车换行其实是两个概念,一是回车,一是换行,换行是光标换到下一行,并不会到文本的开头,回车使光标回到当前行的开始,那在我们语言的层面是怎么做到对文本进行换行和回车的,我们平时说到 \n其实就是换行的意思的,但是语言的本身把他解释成回车换行,\r是回车的意思的,回车换行其实就是先换行再进行回车。
2024-08-30 13:45:30
757
原创 关于Linux(CentOS 7)中的用户sudo命令
可以看到,sudoers文件是属于root的,其他任何用户都无法对其进行修改,这样就只能root用户进行修改。当我们在当前用户使用sudo命令时,提示使用vimer用户的密码,非root。因为这里系统提示需要用户的密码,则认为vimer用户是受信任的。即用户的sudo命令其实没有办法直接执行。当前用户并未在系统的信任列表里。找到该行,修改添加当前用户即可。
2024-08-27 18:06:44
613
原创 什么是强化学习?
强化学习(Reinforcement Learning,RL)是机器学习(Machine Learning,ML)的一个分支,它能随着时间的推移,自动学习最优决策。这是许多科学和工程领域普遍研究的一个问题。RL很自然地将额外的维度(通常是时间,但并非必须是时间)并入学习方程式。这让RL更接近于人们所理解的人工智能(Artificial Intelligence,AI)
2023-08-03 22:41:10
584
原创 【UE5】快速认识入门
打开项目设置,将项目地图谁知中的默认地图项更改为StarterContent中Maps包中的Startermap地图场景。打开后在启动器里创建5.2.1引擎版本(目前最新),并启动,创建游戏项目:1. 蓝图 2.桌面。打开内容菜单后,当前的地图是项目默认的(这里创建的是第三人称)地图场景。返回到内容目录,找到新手资源包里的Maps/Startermap。,可以在其中访问项目中的所有资产。鼠标选中,快速聚焦到元素。
2023-07-29 17:05:25
1223
原创 探讨递归的Fibonacci sequence(斐波那契数列)的时间复杂度
递归先从左边进入,相当于二叉分支,那么栈帧可以重复使用,就是沿着这个树的单个路径向下(考虑最左枝),该路径上每次调用Fib都开一个栈帧,那么叶子节点最大深度为N - 1。时间复杂度:2^0 + 2^1 + 2^2 + ·······+ 2^(n-1) 等比数列求和 2(1 - 2^n) / (1 -2)递归的斐波那契数列计算到2^40 还可以(1w亿,大概5s),2^50次方就得很久了(规模为1000w亿,5000s)时间复杂度O(2^n) — 这里n=10就是2^10 = 1024。
2022-10-25 19:38:02
506
原创 C++中的extern “C“的作用
将上述例子直观理解就是把头文件的包含直接替换://#include "math.h" //相当于替换如下 # ifdef __cplusplus extern "C" {# ifdef __cplusplus } # endif //并测试C也能使用sum extern "C" int sum(int x , int y);return 0;}C:(math.c)//#include "math.h" //相当于替换如下 # ifdef __cplusplus extern "C" {
2022-10-21 22:00:09
731
原创 如何在Centos里将自己当前的用户添加到root环境
在Centos里将自己当前的用户添加到root环境。以超级用户身份查看文件列表,结果是可行的,即我们当前用户已经成功添加到root环境了。完成后按下Ctrl+X即可,会提示是否保存当前修改,输入y即可,按下回车就完成了。这里使用nano可以进行编辑,当然也可以使用Vim来修改文件。先退出当前root环境,输入命令:exit。
2022-10-20 21:36:42
1713
原创 从源程序到可执行程序
程序的开发与执行涉及计算机的各个不同层面。我们在编写好程序后通常是被称为用户程序(user program)或应用程序我们以最常使用,也是很经典的C源程序为例,逐步刨析程序的执行过程,源程序如何成功再计算机上运行,中间到底有多少细节。为了更好的逐步看清执行过程,我们将在Linux系统环境下进行C程序的预处理、编译、汇编、连接,最终将生成可执行目标文件。GCC编译驱动程序对程序进行处理。
2022-10-16 21:04:55
799
原创 C语言预处理、宏定义
这些预定义符号都是语言内置的__FILE__ //进行编译的源文件 __LINE__ //文件当前的行号 __DATE__ //文件被编译的日期 __TIME__ //文件被编译的时间 __STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义//进行编译的源文件 printf("%d\n" , __LINE__);//文件当前的行号 printf("%s\n" , __DATE__);//文件被编译的日期 printf("%s\n" , __TIME__);
2022-10-11 21:52:35
4395
2
原创 C语言文件操作详解
详解C语言文件操作,顺序读取写入操作。每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节。定义pf是一个指向FILE类型数据的指针变量,可以使pf指向某个文件的文件信息区(是一个结构体变量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够找到与它关联的文件。文件缓冲区详解,文件随机读取。
2022-10-09 20:49:32
839
原创 LeetCode141.环形链表
环形链表的判断问题。链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。使用快慢指针,当快指针进入环里的时候,相当于这要flow慢指针一旦进入环,快指针将会开始追赶,其实根据分析,flow走1步,fast走2步这样的步长是肯定可以追上的。快慢指针的思想就是引入两个节点指针flow和fast指针,在步长上慢指针flow一次走一个节点,而快指针一次可以走两个节点,或者更多。相当于是N + 1 - 3 = N - 2和N + 1 - 4 = N - 3,那么最终N能否为0,取决于N的大小。
2022-10-05 19:02:41
550
原创 C语言qsort()函数详细解析
快速排序(Quick Sort)是一个十分经典的排序算法,但不同于希尔排序、选择排序的思想,快速排序的思想其实来源于冒泡排序,他们都属于交换类的排序思想,不断通过比较和移动来实现排序。qsort函数是C语言标准库提供的排序函数,对数据进行排序,且qsort可以实现排序任意类型的数据。
2022-09-29 21:00:13
761
原创 C语言中的柔性数组
在C99 中,结构中的最后一个元素允许是未知大小的数组,这就叫做『柔性数组』成员。0长度的数组在ISO C和C++的规格说明书中是不允许的。这也就是为什么在VC++2012下编译你会得到一个警告:“arning C4200: 使用了非标准扩展 : 结构/联合中的零大小数组”。我们在结构体里使用零长度数组,即未知的数组长度,这就是柔性数组。
2022-09-27 19:45:16
541
原创 动态内存管理
在C语言里,我们对于一块内存空间的使用往往并不关心其内存是否有浪费或不足,但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道,那数组的编译时开辟空间的方式就不能满足了。这时候就只能动态存开辟内存空间。其中free对于内存空间的释放起着关键性作用,这对于内存控制极为关键。
2022-09-23 21:17:57
106
原创 C语言自定义类型——枚举,联合体
{ } 中的内容是枚举类型的可能取值,也叫枚举常量//枚举类型 enum Color {enum Day //星期 {enum Sex //性别 {//创建变量 enum Color co = Bule;//即co表示蓝色 printf("%d\n" , Red);return 0;}结果表明这些每一个枚举可能取值都是常量,也称枚举常量,不能修改。但是这些可能取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值来修改初始值。Red = 5;
2022-09-21 20:17:45
349
原创 【C】手把手详细实现简单通讯录
根据C语言所存在的数据类型,我们很直观的联系我们手机上的通讯录,那么通讯录肯定是以每个联系人为单位的,而联系人是一个复合的数据集合体,他不能单独由整形或者字符串等简单表示,我们自然想到C语言结构体类型,。我们创建这样的结构体:这样就。那么进一步考虑一个通讯录是什么样子,大的通讯录是以N个联系人为单位组成的,这是显然的,那么我们可以增加一个计数变量来保存当前的通讯录有多少个联系人,这样一来就可以实现通讯录的定义,同样使用结构体:😊 考虑联系人属性:考虑设计时能不能更加灵活,比如我们通讯录的数据上限个数能
2022-09-20 19:55:25
14744
原创 关于如何理解位段
1.位段的成员必须是 int、unsigned int 或signed int。2.位段的成员名后边有一个冒号和一个数字。//位段 // //1.位段的成员必须是 int、unsigned int 或signed int。//2.位段的成员名后边有一个冒号和一个数字。//例如: struct A {};A就是一个位段类型//8个字节 return 0;}
2022-09-19 19:41:57
123
原创 字符串旋转
例如:这个问题我们首先考虑移动字符串中的字符,左旋即把字符串左边的字符旋转到末尾,那么旋转k个字符,那我们就移动k次字符串。考虑该函数的参数:测试一下:这里使用双重for循环,外层控制几轮旋转,也就是我需要旋转几个字符。内层for循环来实现把最左边的字符放到字符串末尾,先将arr[0]拿出来保存到tmp,再逐个挪动后面剩下的字符向前位移,循环结束后再将tmp放到字符串末尾。这样即可实现字符串旋转。考虑逆序方法这种方法的思路是:前k个逆序,后len - k个逆序,再整体逆序例如:还是”CHINA“要旋转
2022-09-18 19:25:58
410
原创 C语言自定义类型——结构体
C语言中,提供了本身的数据类型,如:char、int、long、long long、float、double等,那么还有给我们提供自定义类型的实现方法。结构体枚举联合int x;int y;} p1;//声明类型的同时定义变量p1 struct Point p2;//定义结构体变量p2 //初始化:定义变量的同时赋初值。x , y };struct Stu //类型声明 {//名字 int age;//年龄 };//初始化int data;
2022-09-16 21:51:33
223
原创 函数指针,函数指针数组
函数指针到底是什么?return 0;}结果显然相同 ,两者都达到了得到函数地址的目的,函数名也是函数地址。提示:那么想一想函数指针的类型是什么样的?函数指针数组指向函数指针数组的指针
2022-08-28 20:54:38
504
原创 C语言二级指针与指针数组
那么这样的数组元素解引用可以得到具体元素值。那么要访问数组元素,做法与访问二维数组相同。数组我们已经知道整形数组,字符数组。那么如何考虑二级指针找到元素的值。p ,那找到的是 a。
2022-08-19 18:48:22
509
原创 操作符详解
比如: 15 0000 1111 4 个 1。对于移位运算符,不要移动负数位,这个是标准未定义的。显然验证4 >> 1会得到2,右移有除2的作用。:按位或 (只要有1就为1,全0则得0)2.算数右移:右边丢弃,左边补原符号位。:按位与 (都为1才为1,否则为0):按位异或 (相同为0,相异为1)1.逻辑右移:右边丢弃,左边补0。注:他们的操作数必须是整数。...
2022-08-16 21:30:21
101
原创 C语言简单扫雷
若没有踩雷则在刚扫描的区域上显示周围八个区域的地雷数目并继续游戏。创建一个show 棋盘用来和用户交互并初始化。创建一个mine棋盘用来存放雷并初始化。显示一个简单的交互菜单(选择游戏)若全部扫描完非雷区域则游戏结束。判定游戏是否满足结束条件。玩家选择想要扫描的坐标。...
2022-08-14 20:29:47
852
原创 浮点型在内存中的存储
首先,将 0x00000009 拆分,得到第一位符号位s=0,后面8位的指数 E=00000000 ,最后23位的有效数字 M=000 0000 0000 0000 0000 1001。这时,浮点数就采用下面的规则表示,即指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第一位的1。那么,S=1,M=1.01,E=2。移1位,则为1.0*2^(-1),其阶码为-1+127=126,表示为01111110,而尾数。那么,按照上面V的格式,可以得出S=0,M=1.01,E=2。...
2022-08-12 12:45:30
88
原创 高阶C指针
数组指针显然是指针,其指向的是数组//指针数组 - 存放指针的数组 //数组指针 - 指向数组的指针(是指针) int main() {//-----------------指针数组---------------------- int * arr1 [ 10 ];//整形指针的数组 char * arr2 [ 4 ];//一级字符指针的数组 char * * arr3 [ 5 ];...
2022-08-10 20:15:13
103
原创 原码,反码,补码
位(bit)是计算机中处理数据的最小单位,其取值只能是 0 或 1。字节(Byte)是计算机处理数据的基本单位,通常系统中一个字节为 8 位。即:1 Byte=8 bit。数据在计算机中是以其补码形式存储和运算的。正数的原码、反码、补码均相同原码:用最高位表示符号位,其余位表示数值位的编码称为原码。其中,正数的符号位为 0,负数的符号位为 1。负数的反码:把原码的符号位保持不变,数值位逐位取反,即可得原码的反码。负数的补码:在反码的基础上加 1 即得该原码的补码。...
2022-08-09 21:29:14
1002
3
原创 大小端字节序
大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中 小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。...
2022-08-09 12:40:33
106
原创 【OpenCV基础入门】图像概念
OpenCV图像是numpy.array类型的二维或者三维数组。8位灰度图 像是包含字节值的一个二维数组。24位的BGR图像是一个三维数组,也 包含字节值。我们可以通过使用类似于image[0,0]或者image[0,0,0] 的表达式来访问这些值。第一个索引是像素的y坐标或者行,0表示顶 部。第二个索引是像素的x坐标或者列,0表示最左边。第三个索引 (如果有的话)表示一个颜色通道。...
2022-08-08 13:34:54
1194
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人