- 博客(41)
- 收藏
- 关注
原创 Linux下的常见指令以及权限
ls[选项][目录或文件]:对于目录,该命令列出该目录下的所有子目录与文件,对于文件,将列出文件名以及其他信息。1.-a 列出目录下的所有文件,包括以.开头的隐含文件2.-d 将目录文件像文件一样显示,而不是显示其下的文件,如:ls-d 指定目录3.-i 输出文件的i节点的索引信息,如 Is-ai指定文件4.-k 以k字节的形式表示文件的大小5.-l 列出文件的详细信息6.-r 对目录的反向排序7.-t 以时间排序8.-s9.-R 列出所有子目录下的文件10. -1 一行只输出一个文件。
2024-10-28 09:55:36 848
原创 初识Linux
认识Linux就不得不去了解它的历史,这里就简要介绍一下Linux的发展历史:Linux是由林纳斯·托瓦兹于1991年创建的一套自由和开放源代码的类Unix操作系统。它起源于Unix和GNU计划,经过全球程序员的共同开发和协作,形成了庞大的开源社区。Linux在服务器、嵌入式、个人电脑等领域有广泛应用,并支持多用户、多任务、多处理器。随着云计算、大数据和人工智能的兴起,Linux在这些领域的应用也更加广泛,展现出强大的生命力和发展前景。
2024-10-15 18:42:24 411
原创 unordered_map和unordered_set
1.unordered_set的声明如下:key就是unoredered_set底层关键字的类型2.unordered_set默认要求key支持转换为整形3.unordered_set默认要求key支持比较相等4.一般情况下都不需要传后三个模版参数5.unodered_set底层是用哈希桶来实现的,至于哈希桶在后面的文章会有所介绍,增删查改的效率为O(1),与set的相比,迭代器的遍历不再有序(根据unordered可以看出)
2024-10-15 16:53:23 387
原创 C++之红黑树
红黑树是一颗二叉搜索树,他的每一个结点增加一个存储位来表示结点的颜色,可以是红色或者黑色,其中会有四条规则对红黑树进行约束,以下我将一一介绍.
2024-10-13 17:24:19 1214
原创 AVL树实现
1.AVL树属于二叉搜索树的一种,但它不同与普通的二叉搜索树还具有以下的性质:每一个根的左右子树的高度差的绝对值不超过1。AVL树是通过高度差去控制平衡的,所以又称作为平衡二叉搜索树。2.AVL树实现我们引入了一个平衡因子的概念,每一个结点都有它的平衡因子,所谓平衡因子即结点的右子树的高度减去左子树的高度,AVL树的平衡因子有0/1/-1三种,如果平衡因子不属于这三种之一便不是AVL树。
2024-09-28 21:41:03 678
原创 map和set的使用
1.set的声明如下,T就是set底层关键字的类型2.set默认要求T支持小于比较,如果不支持或者想按自己的需求走可以自行实现仿函数传给第二个模版参数3.set底层存储数据的内存是从空间配置器申请的,如果需要可以自己实现内存池,传给第三个参数。4.一般情况下,我们都不需要传后两个模版参数。5.set底层是用红黑树实现,增删查效率是O(logN),迭代器遍历是走的搜索树的中序,所以是有序的。6.set类可以实现数据的去重和排序。
2024-09-28 12:24:26 583
原创 C++之二叉搜索
二叉搜索树又称为二叉排序树,它有以下的特点。1.如果它的左子树不为空,则左子树上所以结点的值都小于等于根结点的值2.如果它的右子树不为空,则右子树上所有结点都大于等于根结点的值3.它的左右子树也分别为二叉搜索树4.二叉搜索树中可以支持插入相等的值,也可以不支持插入相等的值,具体看使用场景定义。
2024-09-27 15:22:46 546
原创 C++之继承
继承机制是面向对象程序设计使代码可以复用的手段,它允许我们在保持原有类特征的基础上进行拓展,增加方法(成员函数)和属性(成员变量),这样可以产生新的类,称为派生类。继承呈现了⾯向对象程序设计的层次结构,体现了由简单到复杂的认知过程。1.2继承定义1.2.1 定义格式在上图中Person是基类,也称父类。Students是派生类,也称作子类。
2024-09-22 16:33:14 766
原创 C++之模版的进阶
一个程序由若干个源文件共同实现,而每一个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。【优点】1.增强了代码的灵活性2.模版复用了代码,节省资源【缺陷】1.模版会导致代码膨胀问题2.出现模版错误时,错误原因难以定位。
2024-09-22 16:31:27 964
原创 C/C++内存管理
delete p2;return 0;注意:在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与freen不会.new的原理1.调用operator new 函数申请空间。2.在申请的空间上执行构造函数,完成对象的构造。delete的原理1.在空间上执行析构函数,完成对象中资源的清理工作。
2024-09-22 16:29:31 697
原创 C++之类和对象(下)
2.内部类默认是外部类的友元类。3.内部类本质也是一种封装,当A类与B类紧密相关的时候,可以考虑把A类设计为B的内部类,当在private或protected的位置时,A类就是B类的专属内部类。class Aprivate:int _h = 1;public:class Bpublic:
2024-09-22 11:29:16 792
原创 C++之类和对象(上)
public:perror("malloc申请空间失败'');return;_top = 0;~Stack()free(_a);private:
2024-09-22 11:28:52 727
原创 C++入门基础
1.定义命名空间,需要使用namespace关键字,在namespace后面跟着命名空间的名字,然后接一对{}即可,在{}中即为命名空间的成员,成员包括变量/函数/类型等。2.namespace本质是定义出一个域,这个域跟全局互相独立,所以就不会发生上述的命名冲突的问题。3. C++中有函数局部域和全局域,命名空间域等;域就像一块独立的空间,域影响的是编译时语法查找一个变量/函数/类型出处的逻辑。在域中的局部域和全局域除了会影响编译查找逻辑,还会影响变量的生命周期,但命名空间域和类域不会影响生命周期。
2024-09-22 11:27:59 902
原创 单链表专题
概念:链表是⼀种、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表的基本结构如下图所示:与顺序表不同的地方是链表里的每一个小部分都是独立申请下来的空间 ,我们称这小部分为“结点”节点的组成部分有两种:当前节点所保存的数据和下一节点的地址。图中指针变量 plist保存的是第⼀个节点的地址,我们称plist此时“指向”第⼀个节点,如果我们希望plist“指向”第⼆个节点时,只需要修改plist保存的内容为0x0012FFA0.为什么还需要指针变量来保存下一个节点的位置?
2024-06-04 15:06:12 1660
原创 预处理详解
其基本语法形式如下:例子:上述例子给MAX定义为1000了注意: #define定义常量的时候不要往其后面加上;,不然;也会被定义,有时可能会导致语法错误。#define机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏或定义宏下面是宏的申明方式:其中的是⼀个由逗号隔开的符号表,它们可能出现在stuff中。注意参数列表的左括号必须与name紧邻,如果两者之间有任何空⽩存在,参数列表就会被解释为stuff的⼀部分。例子:这个宏接收⼀个参数x.如果在上述声明之后,你把。
2024-05-31 09:50:13 851
原创 栈和队列的相关知识
1.1栈的概念及其结构栈:一种特殊的线性表,只允许一端进行插入和删除元素的操作,就像一个水瓶,进水口和出水口都是一样的。入栈:栈的插入操作叫做压栈/进栈/入栈,出栈:删除操作就叫做出栈,
2024-05-31 09:07:40 1600
原创 编译和链接
在ANSI C的任何一种实现中,存在两个不同的环境。第一种:翻译环境:将环境中的源代码转化为可执行的机器指令(二进制指令)。第二种:执行环境:用于实际执行代码。
2024-05-27 22:38:15 872
原创 文件操作详解
硬盘中存储各种数据的集合被称为文件程序文件数据文件(从文件功能的角度来分类)函数名功能适用于fgetc字符输入函数所有输入流fputc字符输出函数所有输出流fgets文本行输入函数所有输入流fputs文本行输出函数所有输出流fscanf格式化输入函数所有输入流fprintf格式化输出函数所有输出流fread二进制输入文件fwrite二进制输出文件所有输入流一般指适应于标准输入流和其他输入流所有输出流一般指适用于标准输出流和其他输出流。
2024-05-26 14:34:18 726
原创 动态内存管理
在一般的内存开辟方式中有两个缺点:1.空间开辟的大小是固定的2.数组在申明的时候,数组的长度已经指定了,数组空间大小不能够调整了而动态内存分配可以自己申请和释放空间,比较灵活。
2024-05-24 14:48:05 941 1
原创 自定义类型:联合和枚举
联合体与结构体类似,都是由一个或多个成员组成,并且各个成员可为不同的类型。联合体最大的特点:所有的成员公用同一块内存空间,所以联合体还有一个别称叫注意:给联合体一个成员赋值,其他成员的值也会变化include<stdio.h>//联合类型的声明unionUncharc;inti;intmain()//联合变量的定义unionUn un= {0//计算连个变量的⼤⼩printf"%d\n"sizeof(un));return0;
2024-05-23 21:43:08 829 1
原创 自定义类型:结构体
位段的声明和结构是类似的,有两个不同:1.位段的成员必须是int或signed int,在C99中位段成员的类型也可以选择其他类型。2.位段的成员名后边有⼀个冒号和⼀个数字。如下所示:structAint_a:2;int_b:5;int_c:10;int_d:30;上图中A就是一个位段类型。位段式结构能够节省内存成员名后面的数字是各个成员所占的比特(8比特等于1字节)位。
2024-05-22 14:19:47 1639
原创 数据在内存中的存储
整数的2进制有三种。三种表示方法均有和符号位都是用0表示正,用1表示负,二进制中最高的一位就是符号位,其余的都是数值位。负整数的三种表⽰⽅法各不相同。原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。补码:反码+1就得到补码。对于整形来说:数据存放内存中的是补码。原因:在计算机系统中,数值⼀律⽤补码来表⽰和存储。原因在于,使⽤补码,可以将符号位和数值域统⼀处理;
2024-05-20 00:46:15 773
原创 C语言内存函数
•函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。•这个函数在遇到'\0'的时候并不会停下来。•如果source和destination有任何的重叠,复制的结果都是未定义的。
2024-05-19 18:23:45 524
原创 字符函数和字符串函数
C语言中有一系列专门做字符分类的函数叫字符分类函数,这些函数都需要头文件如下是常见的字符分类函数:其中最常用的就是函数,它可以判断参数是否是小写字母。其通过返回值来判断是否是小写字母,如果是则返回非零整数,如果不是则返回0。写⼀个代码,将字符串中的⼩写字⺟转⼤写,其他字符不变。charc;if。
2024-05-19 15:12:23 666
原创 深入理解指针(4)
回调函数就是一个通过函数指针调用的函数如果你把函数的指针作为参数传递给另外一个函数,当这个指针被用来调用其指向的函数时,被调用的函数就被称为回调函数。以下将用代码解释回调函数。例子为模拟计算机在使用回调函数前:includeintaddinta,intb)returna + b;
2024-05-17 20:14:35 610
原创 深入理解指针(3)
指针的其中有种类型为字符指针一般使用:intmain()charch ='w';*pc ='w';return0;除此之外还有一种使用方式:|intmain()const char* pstr =printf"%s\n", pstr);return0;这里的const char*pstr = "hello bit"只是把hello bit的首字符地址存放在pstr里面。
2024-05-17 14:47:40 752
原创 深入理解指针(2)
⼀维数组传参,形参的部分可以写成数组的形式,也可以写成指针的形式。4.冒泡排序冒泡排序的核⼼思想就是:两两相邻的元素进⾏⽐较如下代码就是冒泡排序://⽅法1voidintarr[],intsz)//参数接收数组元素个数inti =0;for(i=0;i<sz-1;i++)intj =0;for(j=0;j<sz-i-1;j++)if1])int1arr[j+1] = tmp;intmain()int。
2024-05-16 21:57:10 788
原创 深入理解指针(1)
内存就是存储数据的空间,为了让内存空间更加高效的利用和管理,计算机把其分为一个个的内存单元,每个内存单元的大小取1个字节。计算机中常见的单位(补充):一个比特位可以存储一个2进制的位1或者0bit -⽐特位byte -字节KBMBGBTBPB1byte =8bit1KB =1024byte1MB =1024KB1GB =1024MB1TB =1024GB1PB =1024TB。
2024-05-16 09:47:24 614
原创 操作符的详解
•算术操作符:•移位操作符:<< >>•位操作符:& | ^•赋值操作符:+=-=*=/=%=<<=>>=&=|=^=•单⽬操作符:!++--sizeof类型•关系操作符:>=<===!•逻辑操作符:&&||•条件操作符:?•逗号表达式:•下标引⽤:[]•函数调⽤:()•结构成员访问:->2.二进制和进制转换2进制、8进制、10进制、16进制是数值的不同表⽰形式,它们之间可以互相转化。
2024-05-14 15:07:52 1009
原创 函数的递归
递归是学习C语⾔函数绕不开的⼀个话题,那什么是递归呢?递归其实是⼀种解决问题的⽅法,在C语⾔中,递归就是函数⾃⼰调⽤⾃⼰。以下是一个简单的递归代码:include<stdio.h>intmain()printf"hehe\n"main();//main函数中⼜调⽤了main函数return0;上述代码只是一个基本的形式,是一个存在问题的代码,代码会陷入死循环,然后导致。
2024-05-14 10:11:35 815
原创 VS实用调试技巧
当我们发现程序中存在问题的时候,那下一步是找到问题,并修复问题,这个过程被称作为调试。调试⼀个程序,⾸先是承认出现了问题,然后通过各种⼿段去定位问题的位置,可能是逐过程的调试,也可能是隔离和屏蔽代码的⽅式,找到问题所的位置,然后确定错误产⽣的原因,再修复代码,重新测试。2.Debug和Release。
2024-05-14 09:33:46 843
原创 数组的相关知识
数组是⼀组相同类型元素的集合;从这个概念中我们就可以发现2个有价值的信息:•数组中存放的是1个或者多个数据,但是数组元素个数不能为0。•数组中存放的多个数据,类型是相同的。数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组。2.一维数组的创建和初始化2.1数组创建一维数组创建的基本语法如下:type arr_name[常量值];存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的⼤⼩和数组的元素类型。•type指定的是数组中存放数据的类型,可以是:char。
2024-05-12 22:40:53 562 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人