- 博客(35)
- 收藏
- 关注
原创 Linux自动化构建工具—make/makeflie
make和Makefile是软件开发中用于自动化构建和管理代码编译流程的工具。makefile 可以定义一套规则,告诉编译器如何自动完成编译、链接、清理等操作。make是一个命令,执行该命令需要当前操作目录下有一个名为makefile或者Makefile的文件。我们只需输入make命令,即可一键完成整个构建流程,无需手动输入冗长的编译命令。对于test.c,没有写好makefil时我们需要在命令行中现写gcc命令编译,
2025-03-14 17:21:50
943
原创 Linux—gdb调试器的使用
GDB(GNU Debugger)是一个强大的命令行调试工具,主要用于调试C和C++程序。它可以帮助开发者启动程序、设置断点、检查程序状态以及动态改变程序的执行环境。我们要使用gdb首先要安装gdb一个可执行程序以debug版本发布才能由gdb调试,因为在debug形式下发布才带有调试信息,直接使用gcc编译出来的是release版本。debug版本的可执行程序test-d明显比release版本的要大,这是符合逻辑的。
2025-03-13 15:13:12
624
原创 Linux基础开发工具—gcc/g++
GCC(GNU Compiler Collection,GNU编译器套件)是由GNU项目开发的编程语言编译器。它最初被设计为GNU操作系统的标准编译器,现在已经成为大多数类Unix操作系统(如Linux、BSD、MacOS X等)的标准编译器。gcc与g++都是GNU(组织)的一个编译器。它们的主要区别有C 代码:优先使用 gcc,避免引入不必要的 C++ 依赖。C++ 代码:优先使用 g++,简化编译流程。混合代码:分别用 gcc 编译 C 代码,g++ 编译 C++ 代码。
2025-03-12 19:28:16
801
原创 Linux基础开发工具—vim
Vim全称是Vi IMproved,即说明它是Vi编辑器的增强版。Vim是一种多模式编辑器,不同模式下按键功能不同。
2025-03-10 21:36:55
1349
原创 C++—stack和queue的使用及底层实现
栈最鲜明的特点就是它的后进先出(LIFO),其操作只能从一端进行,主要操作有入\出栈、判断栈空、访问栈头等。栈的使用比较简单,只有几个主要的接口函数。函数说明接口说明stack()构造空的栈empty()检测stack是否为空size()返回stack中元素的个数top()返回栈顶元素的引用push()将元素val压入stack中pop()将stack中尾部的元素弹出显式实例化底层容器//默认底层容器为 deque//显式实例化底层容器为 vector。
2025-03-10 17:07:19
850
原创 C++—list类的使用及模拟实现
list在底层是双向链表,能够进行动态内存分配,与其他容器相比,list的插入删除要更高效。1、list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2、list的底层是带头双向循环链表结构,在节点中通过指针指向其前一个元素和后一个元素。3、与其他的序列式容器相比(array,vector,deque等),list通常在任意位置进行插入、移除元素的效率更高。list最大的缺陷是不支持任意位置的随机访问list和vector一样也是类模板。
2025-03-09 21:41:00
974
原创 C++—string类的操作使用
在C++中有一个强大的标准模板库,即STL,它是C++标准库的一部分。STL由六大部分:仿函数、迭代器、算法、空间配置器、容器、配接器。今天我们要将的string类就是STL中的容器。首先我们先大致理解一下string类:1、string是表示字符串的字符串类。2、string类是basic_string模板类的一个实例,即typedef basic_string<char> string。3、该类的接口与常规容器的接口基本相同,并且新增了很多现代字符串操作的功能。
2025-03-07 00:43:26
921
原创 C++—模板初阶
泛型编程是用来编写与类型无关的同用代码,是代码复用的一种手段。模板是泛型编程的基础。模板分为和。例如我们想要实现乘法使用函数重载的不足:1、重载的函数仅是类型不同,代码复用率低2、代码可维护性低,一个函数出错可能导致所以重载出错。那能否给编译器一个模子,让编译器根据不同的类型利用该模子来生成代码呢?C++中我们可以使用模板,通过给填充不同,来生成具体类型的代码。
2025-03-05 15:49:23
795
原创 C&C++的内存管理
1、栈:存有非静态局部变量、函数参数、返回值等。2、内存映射段:用于装载共享的动态内存库,用户可使用系统接口创建共享内存,做进程间通信。3、堆:用于程序运行时动态内存的分配。4、数据段:存有全局数据和静态数据。5、代码段:存有可执行代码、只读变量。
2025-03-05 00:11:20
1156
原创 Linux基础开发工具—软件安装器yum。人类世界软件安装器一夜消失,而我却会用yum
人类世界软件安装器一夜消失,图形化操作技术从全人类的记忆中抹除,而我却掌握了独门秘籍,靠着yum成为了人类始皇。正如我们所熟知的windows系统一样,Linux系统同样需要安装软件,不同于windows的图形化操作那样,点点下载安装按钮就能安装,Linux的命令行下,我们需要依靠yum来为Linux系统安装软件。
2025-03-04 18:02:07
803
原创 Linux权限的理解。我又幻想了,幻想自己是root,在系统里呼风唤雨
shell是操作系统外壳程序的通称。window图形化界面,Linux的命令行bash都是典型的外壳程序。而我们要知道的是,操作系统大致可分为外壳程序和内核程序,为什么需要外壳程序而不是直接访问内核呢,我们程序员接触内核当然可以用我们的基础知识使用命令行进行交互,但是绝大部分用户是无法读懂命令,也不可用命令进行交互,所以我们想要通过外壳程序让交互更加直观易用。
2025-03-03 20:22:48
828
原创 C++—类与对象(中)
通过第五个特性,我们会发现默认构造函数好像没有什么用,其实不然。C++把类型分成内置类型(基本类型)和自定义类型。内置类型就是语言提供的数据类型,如:int/char...,自定义类型就是我们使用class/struct/union等自己定义的类型。而默认构造函数是不会处理内置类型的。默认构造函数会调用成员变量的构造函数,如果成员变量没有显式定义构造函数,就调用默认生成的构造函数,否则就调用显式定义的构造函数。
2025-03-01 16:25:43
1092
原创 C语言数据结构—堆的应用及Topk问题
由堆的性质可知堆的根部结点一定是这个堆的最值(大堆为最大值,小堆为最小值)。无论使用向上调整还是向下调整,整个排序的时间复杂度都是O(N*logN)建堆和堆删除中都用到了向下调整,因此掌握了向下调整,就可以完成堆排序。2、再进行调整使其维持堆的结构,一直到n减到1。1、把根结点和最后一个叶子结点交换,将n减1。2、利用堆删除思想来进行排序。1、把数组先原地调整成堆。个最大的元素,则建小堆。个最小的元素,则建大堆。这里我们都调整为大堆。
2025-02-25 17:39:30
189
原创 C语言数据结构—二叉树的链式结构实现
二叉树中的核心思想是分治。中序遍历2的右子树又可以转化为中序遍历3的左子树后访问3,然后中序遍历3的右子树。2、求这棵树第三层的结点数可以转化为求1的左子树以及1的右子树的第二层结点数之和。求1的左子树的第二层结点数,可以转化成求2的左子树和2的右子树的第一层结点数之和。中序遍历1的左子树可以转化为中序遍历2的左子树后访问2,然后中序遍历2的右子树。2的左子树结点数可以转化成3的左子树结点数加D的右子树结点数加1。1的左子树结点树可以转化成2的左子树结点数加右子树的结点树加1。
2025-02-24 23:09:03
806
原创 C语言—数组提高篇
往往我们在写代码的时候,会将数组作为参数传个函数,比如:我要实现用一个冒泡排序将一个整形数组排序。所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。在C99标准支持了变长数组的概念,数组的大小可以使用变量指定,但是数组不能初始化。数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。后记:本篇文章是数组的提高篇,文章多有不足,请各位大佬多多担待。数组名是数组首元素的地址。
2023-05-21 04:30:00
155
6
原创 C语言—分支与循环语句提高篇
表达式语句函数调用语句控制语句复合语句空语句本文介绍的是控制语句。顺序结构、选择结构、循环结构)它们由特定的语句定义符组成。条件判断语句也叫分支语句:if语句、switch语句;循环执行语句:do while语句、while语句、for语句;break语句、goto语句、continue语句、return语句。
2023-05-14 16:48:02
205
9
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人