- 博客(41)
- 收藏
- 关注
原创 【Linux】Linux环境基础开发工具使用之Linux调试器-gdb使用
程序发布通常包含两种主要模式:Debug模式与Release模式。Debug模式用于开发阶段,包含详尽的调试信息,便于开发者追踪并修复程序中的错误。而Release模式则用于最终发布,经过优化以提高运行效率,同时去除了调试信息,减少程序体积。默认发布模式多为Release,以提供用户最佳的使用体验。在程序调试过程中,gdb是不可或缺的工具。它允许开发者在程序运行时暂停、检查程序的内部状态和变量值,逐步执行代码,从而定位问题所在。通过gdb,开发者可以更高效地修复程序中的bug,确保程序的稳定性和可靠性。
2024-08-21 07:24:06
1370
77
原创 【Linux】Linux环境基础开发工具使用之Linux编译器-gcc/g++使用
本文概述了编译过程及GCC/G++的使用,包括预处理、编译、汇编和链接等关键步骤。特别针对C语言编译中遇到的“for循环初始声明仅在C99模式下允许”错误,提出了解决方法。此外,还详细讨论了数据库中的动态库与静态库的概念及其动/静态链接的优缺点。预处理阶段处理宏定义和条件编译等;编译阶段将源代码转换为汇编代码;汇编阶段进一步转换为机器语言;链接阶段则将所有编译生成的目标文件及库文件合并成可执行文件。动态库与静态库在链接方式上不同,各有优劣。
2024-08-16 14:18:55
1902
96
原创 【Linux】Linux环境基础开发工具使用之软件包管理(yum)与 Linux编辑器(vim)
本文详细介绍了Linux环境下两大核心工具:yum软件包管理器和vim文本编辑器。yum部分涵盖了软件包基础、rzsz工具简介、软件包的查看、安装、卸载、更新及yum源更新方法。vim部分则从基本概念出发,深入讲解了vim的基本操作、命令模式与底行模式的常用命令,包括光标移动、文本编辑、查找与保存等。此外,还介绍了vim的高级功能如视图模式、替换模式及多文件编辑,并提供了简单的vim配置指南,帮助用户根据个人需求优化vim使用体验,提升代码编辑与管理效率。
2024-08-11 13:09:03
1888
195
原创 【Linux】shell命令与Linux权限的概念
Linux系统的权限管理通过shell命令实现,涉及用户、指令、文件类型和访问权限等多个方面。用户通过su和sudo指令切换身份以执行高权限命令。文件权限分为所有者、所属群组和其他用户,每类用户拥有读、写、执行等基本权限。权限值可用字符或八进制数值表示,通过chmod、chown、chgrp等命令灵活设置。umask控制新文件的默认权限,file命令识别文件类型。目录权限同样重要,影响用户的访问行为。此外,粘滞位增强目录安全,防止非所有者删除文件。Linux权限管理为系统安全提供了坚实基础。
2024-08-04 15:43:10
5138
205
原创 【Linux】常见指令的使用
在Linux系统中,掌握常用命令是高效管理与操作文件系统的关键。灵活组合与运用得以展现。掌握这些基础而重要的命令,对于Linux系统的日常管理和维护至关重要。
2024-07-27 16:55:17
1341
184
原创 【C++】位图和布隆过滤器
这篇文章详细的介绍了位图与布隆过滤器,位图与布隆过滤器是C++开发者在处理大数据集时常用的优化工具。位图通过每一位表示集合中某元素的存在性,实现空间与查询效率的双赢,特别适用于快速去重和查找。而布隆过滤器则是一种概率型数据结构,利用多个哈希函数降低误判率,适用于判断元素是否“可能”存在于集合中,适合处理大规模数据过滤。尽管布隆过滤器存在删除困难和一定误判率的缺点,但其高效的空间利用率和查询速度,使其成为处理海量数据时的优选方案。掌握位图与布隆过滤器的实现与应用,对于提升C++程序性能至关重要。
2024-07-21 14:46:20
1226
191
原创 【C++】哈希表的模拟实现及 unordered_set 和 unorderded_map 的封装
这篇文章详细探讨了哈希表的模拟实现过程,从模板参数列表的灵活设计到迭代器的引入,展现了哈希表作为高效数据结构的强大功能。接着,文章深入剖析了哈希表的核心组件,包括哈希函数、节点类和迭代器的实现,以及构造函数、析构函数等关键函数的设计。通过一系列精心设计的函数,实现了哈希表的查找、插入、删除等基本操作,确保了数据的高效管理。文章还展示了如何基于哈希表实现unordered_set和unordered_map,这两个数据结构在C++标准库中扮演着重要角色,分别用于存储唯一元素集合和键值对集合。
2024-07-12 20:34:37
2775
184
原创 【C++】哈希的概念及STL中有关哈希容器的使用
这篇文章详细介绍了C++标准库中的无序关联容器unordered_set和unordered_map,它们基于哈希表实现,提供了高效的增删查改操作。这些容器允许存储唯一元素(对于unordered_set)或键值对(对于unordered_map),并且查找时间复杂度通常为O(1)。它们提供了丰富的接口,如构造、迭代、容量操作、增删查改及访问、以及桶操作等。底层结构基于哈希函数和哈希冲突解决策略(如开散列和闭散列),确保了数据的快速访问和存储。这些容器在需要高效查找和存储唯一元素或键值对的场景中非常有用。
2024-06-21 10:30:00
2392
134
原创 【C++】AVL树/红黑树实现及map与set的封装
这篇文章详细介绍了AVL树和红黑树的基本概念、性质、节点定义、操作以及它们的实现方法。首先,我们探讨了AVL树,这是一种自平衡二叉搜索树,通过旋转操作保持树的平衡。接着,我们介绍了红黑树,一种更复杂但插入和删除操作更高效的自平衡二叉搜索树,并比较了它与AVL树的特点。随后,我们深入模拟了红黑树的实现,包括迭代器、清空、大小判断、节点查找、插入和遍历等功能。最后,我们讨论了如何封装set和map数据结构,基于红黑树的特性提供高效的数据存储和检索功能。希望这篇文章能够帮助读者深入理解二叉树的结构和应用。
2024-06-14 13:00:41
1867
165
原创 【C++】─篇文章带你熟练掌握 map 与 set 的使用
这篇文章详细介绍了C++标准库中的关联式容器,包括键值对(pair)的概念以及树形结构的关联式容器如set、multiset、map和multimap。首先,我们讲解了pair的基本使用及其常用接口,它是这些关联式容器的基础。接着,我们深入探讨了set和multiset的构造、迭代器使用、容量操作以及增删查改等操作。随后,我们介绍了map和multimap的类似功能,并特别提到了map中的operator[]操作符。最后,我们通过具体的OJ问题为例进行讲解,希望能够帮助读者深入理解本篇文章的知识。
2024-06-07 01:23:43
1314
154
原创 【C++】二叉树进阶(二叉搜索树)
这篇文章详细介绍了二叉搜索树(BST)的基本概念、操作、代码实现以及应用。首先,介绍了BST的定义和核心操作,包括查找、插入和删除,并提供了非递归和递归两种实现方式。随后,通过具体的代码示例,展示了BST的节点设置、类框架构建以及查找、插入、中序遍历和删除函数的完整实现。此外,还探讨了BST在实际问题中的应用和性能分析。进阶部分则包含了一系列与二叉树相关的OJ题目,涵盖了从根据遍历序列构造二叉树,到层序遍历、公共祖先查找、BST与双向链表转换等多种场景,希望能够帮助读者深入理解二叉树的结构和应用。
2024-05-26 14:28:18
1742
188
原创 【C++】多态
这篇文章详细介绍了C++面向对象编程中的多态概念及其相关知识点。多态是编程中的一个核心概念,它允许使用相同的接口处理不同的数据类型。多态的实现依赖于虚函数和继承机制,通过重写虚函数,可以实现对象在运行时根据类型执行不同的操作。C++11中的override和final关键字提供了对继承和多态的更强支持。多态的原理涉及虚函数表和动态绑定,允许程序在运行时确定应调用哪个虚函数的版本。单继承和多继承关系中的虚函数表处理方式略有不同,特别是菱形继承和菱形虚拟继承需要特别注意。
2024-05-18 10:20:57
2220
158
原创 【C++】继承
这篇文章详细介绍了C++面向对象编程中的继承概念及其相关知识点。首先定义了继承的基本概念和格式,包括继承关系、访问限定符以及基类成员访问方式的变化。接着,讨论了基类和派生类对象之间的赋值转化,以及继承中的作用域问题。文章还详细阐述了派生类的默认成员函数特性,并介绍了如何构建不可继承的类。此外,还探讨了继承与友元、静态成员的关系,以及复杂的菱形继承和菱形虚拟继承的解决方案。最后,对虚拟继承如何解决数据冗余和二义性进行了深入分析,并指出在菱形继承中应该选择哪个类进行虚继承修饰。
2024-05-10 13:53:01
1331
162
原创 【C++】一篇文章带你深入了解stack、queue 和 priority_queue
这篇文章详细介绍了C++标准库中涵盖了栈(Stack)、队列(Queue)、优先队列(Priority Queue)以及容器适配器的介绍和使用方法。栈是一种后进先出的数据结构,通过 push 和 pop 来操作元素,而队列则是一种先进先出的数据结构,使用 push 和 pop 来实现元素的添加和删除。优先队列则根据元素的优先级进行排序。除了介绍这些数据结构的使用方法外,还对它们的模拟实现进行了说明。同时还介绍了容器适配器的概念,以及为什么选择 deque 作为栈和队列的底层默认容器。
2024-05-01 12:42:01
1660
111
原创 【C++】一篇文章带你深入了解list
这篇文章详细介绍了C++标准库中的list容器,包括常见接口的说明和使用方法,以及对list的模拟实现。list是一个双向链表,其插入和删除操作较快,但访问元素较慢。在标准库中,list提供了多种构造函数,可以根据不同的需求进行初始化。list迭代器的使用也十分灵活,可以使用正/反向迭代器访问。在对list进行操作时,需要注意迭代器的失效问题。为了更深入地理解list的工作原理和实现细节,本文还进行了list的模拟实现。最后,本文还对比了list和vector的异同点,希望对大家理解list有所帮助。
2024-04-23 13:14:48
1910
125
原创 【C++】一篇文章带你深入了解vector
这篇文章详细介绍了C++标准库中的vector容器以及其常见接口和实现细节。首先,介绍了vector的基本概念和在标准库中的角色,然后详细说明了vector的常见接口,包括构造函数、迭代器的使用、容量操作以及增删查改等操作。接着,深入剖析了vector的实现细节,包括reserve和resize的实现、size、capacity和empty的实现、默认成员函数的实现、迭代器和范围构造函数的实现、插入、删除、头插、头删、尾插和尾删元素的实现、operator[]的实现等。
2024-04-17 10:24:50
1815
124
原创 【C++】模版
这篇文章详细介绍了泛型编程中的关键概念和技术。首先介绍了泛型编程的概念,然后深入讨论了函数模板和类模板的定义、实例化以及模板参数的匹配原则。接着介绍了非类型模板参数和模板的特化,包括函数模板和类模板的特化形式以及应用示例。还讨论了模板分离编译的概念、实现和解决方法。希望这篇文章对大家理解模版有所帮助。
2024-04-11 12:09:39
2107
110
原创 【C++】一篇文章带你深入了解string
这篇文章详细介绍了学习和使用C++标准库中的string的重要性和方法。本篇文章逐一解释了各种常用接口和函数的使用方法,从string对象的常见构造到容量操作、访问及遍历操作,再到增删查改等方面。特别是对经典的string问题如浅拷贝、深拷贝和写时拷贝进行了深入讨论。此外,文章还对string进行了模拟实现,包括默认成员函数、c_str、size、capacity、empty等函数的实现方法,以及比较函数、find、insert、erase和substr等功能的模拟实现。希望这些实现能够帮助大家理解。
2024-04-01 10:56:05
1842
154
原创 【C++】C&C++内存管理
内存管理是C / C++编程中至关重要的一部分,它直接影响程序的性能和稳定性。首先,了解C / C++内存分布是理解内存管理的基础。在C语言中,动态内存管理主要通过malloc、calloc、realloc和free函数来实现,而C++则引入了new和delete操作符,更方便地管理内存。对于内置类型,可以直接使用new和delete操作符,而对于自定义类型,需要实现相应的new和delete操作符以便正确地分配和释放内存。
2024-03-21 14:01:20
2087
163
原创 【C++】类和对象(下)
这篇文章深入探讨了C++中类的关键概念,包括构造函数的不同赋值方式、初始化列表和explicit关键字的使用。文章中还介绍了static成员的概念和特性,以及友元函数和友元类的作用。内部类、匿名对象和拷贝对象时的编译器优化也得到了详细解释,帮助大家更深入地理解类和对象之间的关系。本篇文章还设有对应题目,希望大家能够巩固对这些概念的理解和应用能力。
2024-03-13 16:29:57
1749
119
原创 【C++】类和对象(中)一篇文章带你学会六大默认成员函数
这篇文章深入探讨了C++中类的关键概念,重点介绍了类的6个默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值运算符重载。详细解释了每个函数的概念和特性,帮助大家深刻理解它们在对象生命周期中的作用。本文章还对日期类进行了实现,通过实际案例展示了如何应用这些概念来创建实用的类。此外,对const成员和取地址操作符的重载也能够更好地理解C++中类的强大功能和灵活性。
2024-03-06 12:15:46
1593
129
原创 【C++】类和对象(上)
本篇系统地介绍了面向对象编程中关键的概念和基础知识。从面向过程和面向对象的初步认识出发,逐步深入到类的引入、定义、访问限定符和封装等方面。详细解释了访问限定符的作用,以及封装如何提高代码的可维护性和安全性。类的作用域、实例化和对象模型的讨论进一步拓展了读者对面向对象编程的理解。本文章还对类对象大小计算、存储方式猜测和内存对齐规则的深入讨论。此外,为了更好地理解对象之间的关系还对this指针的引出和特性进行了解释。
2024-02-29 21:40:37
1949
125
原创 【C++】C++入门
C++是一种广泛应用于软件开发的高级编程语言。它结合了C语言的高效性和面向对象编程的特性,使得程序员能够编写高性能且可扩展的代码。C++具有丰富的标准库,涵盖了各种数据结构和算法,为程序员提供了丰富的工具和资源。入门学习C++时,重点理解语言的基本语法、数据类型、控制流结构以及面向对象编程的概念。通过编写简单的程序,掌握变量的声明与定义、函数的定义与调用、类的创建与使用等基本技能。同时,了解指针、引用、内存管理等重要概念,以及异常处理、模板元编程等高级特性,将有助于更深入地理解和应用C++语言。
2024-02-17 15:47:12
1354
48
原创 【数据结构】一篇文章带你学会八大排序
这篇文章将讲解八大排序的原理、思想、复杂度等,并且我会使用图片来讲解这些排序的过程,将过程讲完后会有C语言的代码实现,可以仔细阅读一下。在每讲完一个排序后,我会做一个小总结,帮助大家更好理解排序。
2024-02-08 21:23:44
2245
58
原创 【C语言】指针超详细讲解(超级详细!!!快来看快来看!!!)
本章将会对指针分为初阶指针和进阶指针,在初阶指针中我会讲述指针的概念、指针类型、野指针、指针和数组的关系和二级指针,而在进阶指针中我我会讲述字符指针、指针数组、数组指针、函数指针、函数指针数组、指向函数指针的指针和回调函数的相关内容,希望对大家有所帮助。
2023-07-20 11:46:23
8580
94
原创 【数据结构】非线性结构之树结构(含堆)
本篇文章将会对一些二叉树和堆的概念进行讲述,其中包括二叉树线性存储、二叉树链式存储和堆的概念和实现,本文章中还会对堆进行运用,例如堆排序的实现、TopK的实现。文章还会对一些二叉树题目进行略微的讲解,例如二叉树的前、中、后和层序遍历,二叉树的节点个数、二叉树的叶子节点个数和二叉树的第k层节点个数等题目讲解,希望对大家有所帮助。
2023-07-12 11:43:51
2824
129
原创 【数据结构】时间复杂度与空间复杂度
在学习C语言的时候,大多数的小伙伴们并不会对算法的效率了解,也许算法也是一个陌生的领域,当进入了数据结构这个模块,就应该对算法的效率做一个清晰的认识。但是算法的效率是什么呢?这里就引出来时间复杂度与空间复杂度的概念了。
2023-05-29 09:04:53
2338
81
原创 【数据结构】线性表之链表
这篇文章讲述关于链表的定义、类别、实现、多种不同链表的优缺点和链表与顺序表的优缺点。线性表之顺序表链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
2023-05-16 15:05:04
2795
49
原创 【数据结构】线性表之顺序表
线性表是n (n >= 0)个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的线性表在物理上存储时,通常以数组和链式结构的形式存储。数组形式链表形式顺序表是一种线性数据结构,通过连续的内存空间存储元素,可以随机访问任何位置的元素。它支持在常量时间内进行插入、删除和访问操作,但在插入或删除元素时可能需要移动后续元素,导致时间复杂度为O(n)。
2023-05-10 22:36:08
1022
15
原创 【C语言】通讯录(文件版)
前面我们完成了通讯录的静态版本和动态版本,虽然功能已经比较完善了,但是前面的通讯录缺少了存储联系人的能力,所以我们学习了文件的操作管理,这里我们就用上一篇文章的知识来完成这次的文章吧。关于通讯录的前两篇文章我放上两个链接:(1)
2023-05-06 13:49:51
1298
23
原创 【C语言】文件操作详解
前面我们使用通讯录记录联系人的时候,在程序结束后这些联系人都会被销毁,在下一次启动程序的时候,这些联系人又需要重新输入,为了防止这种情况,我们引入了文件操作,在程序结束后将通讯录中的内容保存在文件中,在下一次启动程序的时候在文件中读取内容,这样就能实现数据的持久化。
2023-04-28 18:10:54
969
13
原创 【C语言】通讯录(动态版)
通讯录动态版:上一篇文章我们完成了静态版的通讯录,这次我们完成对通讯录进行改造,使得通讯录能够自动扩大通讯录的容量。
2023-04-20 21:30:27
619
6
原创 【C语言】通讯录(静态版)
静态通讯录的完成,包括对通讯录进行增加(Add)、删除(Dul)、查找(Search)、修改(Modify)、显示(Show)、排序(Sort)等操作。
2023-04-11 23:01:44
1724
6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人