- 博客(26)
- 收藏
- 关注
原创 Linux 调试器 GDB 使用指南
GDB(GNU Debugger)是GNU项目开发的一个功能强大的调试工具,常用于调试C/C++等编译型语言。启动一个程序并指定其运行环境在代码中设置断点,暂停程序的执行逐行跟踪程序的执行检查和修改程序的变量和内存调试崩溃的程序(例如通过分析core dump文件)GDB是一款命令行工具,但也可以和许多IDE集成,如Eclipse、VSCode等,提供图形化的调试界面。GDB 是 Linux 系统中功能强大的调试工具,适合用来调试 C/C++ 等程序语言。
2024-09-14 18:45:07 1400
原创 冯·诺依曼体系结构简介:计算机历史的奠基石
冯·诺依曼体系结构是现代计算机设计的奠基石。它通过将程序和数据存储在同一内存中,使计算机具有了通用性、灵活性和扩展性。尽管存在一定的局限性,但它的思想仍然深刻影响着今天的计算机系统。理解冯·诺依曼体系结构,对于深入掌握计算机科学和系统设计是至关重要的。你是否想了解更多关于冯·诺依曼体系结构如何影响现代计算机的设计?或者对计算机科学的其他方面感兴趣?欢迎在评论区留言,一起探讨更多技术话题!
2024-09-14 18:37:34 951
原创 [C++]深入理解C++中的泛型编程、函数模板与类模板
泛型编程是一种通过编写与具体数据类型无关的代码,以实现代码重用的编程范式。在C++中,泛型编程的核心思想是通过模板(template)实现类型参数化,使得函数或类能够适用于多种数据类型。优点:代码重用性:无需为每种数据类型单独编写代码,大大减少了代码冗余。类型安全:模板在编译时会进行类型检查,有效避免运行时错误。// 适用于int类型// 适用于double类型return 0;在这个简单的例子中,add函数可以接受任意类型的参数,只要这些类型支持加法操作。这就是泛型编程的强大之处。
2024-08-28 08:48:00 1234
原创 [C++] 智能指针详解:提升资源管理的利器
智能指针是一个模板类,它封装了原始指针,并负责自动管理指针所指向的动态内存。通过智能指针,当它超出作用域时,自动释放所占用的内存,从而避免了手动释放内存的麻烦以及可能带来的错误。智能指针是现代C++编程中不可或缺的工具,它们不仅简化了内存管理,还显著提高了代码的健壮性和可维护性。在实际开发中,根据需求选择合适的智能指针类型,可以让你在编写高效、可靠的代码时更加得心应手。
2024-08-28 08:39:12 340
原创 [C++] 异常处理:提高代码的健壮性与可维护性
异常(Exception)是在程序运行过程中发生的一种特殊情况,它表示程序遇到了无法正常处理的错误或意外情况。C++中的异常处理机制允许程序在出现错误时,将控制权转移到一个专门的处理代码块,从而避免程序崩溃并提供错误处理逻辑。有时,标准异常类可能无法满足特定需求。在这种情况下,你可以定义自己的异常类。自定义异常类通常继承自,并重写what()方法以提供异常的具体描述。
2024-08-12 10:29:12 502
原创 [Linux] Makefile:自动化构建工具的基础
Makefile 是一个脚本文件,它定义了如何编译和链接程序。它与GNU Make工具配合使用,可以自动化完成编译、打包等繁琐的工作。通过Makefile,开发者可以简单地输入make命令,Make工具会根据Makefile的规则自动完成一系列操作,如编译源文件、生成可执行文件等。在Makefile中,变量用来存储编译器选项、文件列表等内容。CC = gcc上面定义了一个CC变量,它表示编译器(此处为gcc),CFLAGS则存储编译选项。
2024-08-12 10:21:57 1029
原创 [C++] 红黑树(Red-Black Tree)详解
红黑树是一种自平衡的二叉搜索树,具有对数时间复杂度的插入、删除和查找操作。它通过特定的节点颜色和旋转操作来保持平衡。C++ 标准库中的std::map和std::set就是基于红黑树实现的。上述示例展示了红黑树的基本实现,包括节点插入和树的平衡维护。了解红黑树的基本操作和实现细节对优化数据结构和提高程序效率非常重要。
2024-08-11 10:07:49 420 1
原创 [Linux]软件包管理器 yum
Yum是Linux系统中非常强大且易用的包管理工具,通过它我们可以轻松地管理系统中的软件包。无论是安装、更新还是卸载软件,Yum都提供了简洁而高效的解决方案。此外,通过合理配置Yum仓库和掌握一些实用技巧,可以进一步提升系统管理的效率。希望通过本文,你对Yum有了更深入的了解,并能在日常工作中熟练应用。
2024-08-11 09:41:05 770
原创 [C++]unordered_set/map
1. unordered_map是存储<key, value>键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。2. 在unordered_map中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。3. 在内部,unordered_map没有对<kye, value>按照任何特定的顺序排序, 为了能在常数范围内找到key所对应的value,unordered_map将相同哈希值的键值对放在相同的桶中。
2024-08-03 12:46:34 470
原创 C++ 二叉搜索树 BST(BinarySearchTree)
对有n个结点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是结点在二 叉搜索树的深度的函数,即结点越深,则比较次数越多。二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左右子树也分别为二叉搜索树。情况d:在它的右子树中寻找中序下的第一个结点(关键码最小),用它的值填补到被删除节点 中,再来处理该结点的删除问题--替换法删除。
2024-07-18 07:29:07 972 1
原创 C++ 多态
通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会 产生出不同的状态。导致错误输出的原因是,调用函数 area() 被编译器设置为基类中的版本,这就是所谓的,或- 函数调用在程序执行前就准备好了。有时候这也被称为,因为 area() 函数在程序编译期间就已经设置好了。但现在,让我们对程序稍作修改,在 Shape 类中,area() 的声明前放置关键字此时,编译器看的是指针的内容,而不是它的类型。
2024-07-17 17:45:45 175
原创 C++中的栈和队列
栈和队列是两种重要的数据结构,它们分别适用于不同的场景。栈适合需要后进先出的场景,如函数调用栈、括号匹配等;队列适合需要先进先出的场景,如任务调度、广度优先搜索等。在C++中,标准库提供了方便的栈和队列实现,使得我们可以高效地进行数据操作。通过掌握栈和队列的基本操作和使用方法,可以更好地解决实际编程中的问题。
2024-05-30 17:59:36 282
原创 std::vector 简介
是 C++ 标准库提供的动态数组容器,具有自动管理内存、随机访问、动态增长等特性。它可以在不手动管理内存的情况下存储和操作一组元素。
2024-05-27 17:21:32 333
原创 C++拷贝函数详解
它们用于处理对象的复制操作,确保在创建新对象或赋值操作时能够正确地复制现有对象的状态。在上面的示例中,拷贝赋值运算符首先检查自赋值的情况(即对象赋值给自己),然后释放当前对象的内存,并根据另一个对象的状态重新分配和初始化内存。最后,返回当前对象的引用以支持链式赋值。拷贝构造函数必须正确处理类的所有成员变量,特别是当类包含动态分配的内存、指针或其他需要特殊处理的资源时。拷贝赋值运算符是一个特殊的成员函数,用于将一个现有对象的值赋给另一个对象。是重载的赋值运算符,返回对调用对象的引用,以便支持链式赋值。
2024-04-10 17:40:18 465 1
原创 C++缺省参数:让你的函数更灵活
缺省参数是C++中一个非常实用的特性,它允许我们在定义函数时为参数提供默认值,从而简化函数调用并增加函数的灵活性。然而,在使用缺省参数时也需要注意一些潜在的问题,如参数顺序、过度使用以及与函数重载的交互等。在C++编程中,缺省参数(Default Parameters)是一个很有用的特性,它允许我们在定义函数时为参数提供默认值。这样,在调用函数时,如果没有为这些参数提供值,那么就会使用这些默认值。在函数定义时,我们只需要在参数列表的末尾为参数指定一个默认值即可。参数提供值,因此使用了默认值。
2024-04-08 18:17:44 281
原创 贪吃蛇游戏的设计与实现--C语言
玩家可以使用键盘上的箭头键来控制蛇的移动,通过吃掉食物使其变长,同时要避免撞到墙或自己的身体。贪吃蛇游戏是一款经典的小型游戏,玩家需要控制一条蛇在屏幕上移动,通过吃掉食物使其变长,同时要避免蛇头撞到墙或自己的身体。在每一帧中,根据蛇的移动方向移动蛇,判断蛇头是否吃到食物,如果是则增长蛇身并得分。同时,我们需要检测是否撞到墙或自己的身体,如果是则游戏结束。为了提高游戏的可玩性,我们可以添加一些功能,比如加速和减速。最后,我们需要实现游戏结束后的资源释放。我们需要清除屏幕上的地图和蛇,释放动态分配的内存。
2024-01-29 22:07:45 533 2
原创 深入理解C语言文件操作
例如,我们可以检查fopen()函数是否成功打开了文件,或者fscanf()函数是否成功读取了数据。我们将介绍如何打开、读取、写入和关闭文件,以及如何在C语言中进行错误处理。记住,在进行文件操作时,我们应始终检查错误,并始终在完成操作后关闭文件。一旦我们打开了文件,我们就可以使用fscanf()或fgets()等函数来读取文件内容。在C语言中,我们使用fopen()函数来打开一个文件。模式决定了文件的打开方式,例如只读、写入、追加等。如果文件打开成功,fopen()函数将返回一个指向文件的指针。
2024-01-16 15:42:31 397 1
原创 C语言编译与链接:从源代码到可执行文件
但此时程序还不能直接运行,因为目标文件中可能还引用了其他目标文件中的符号(函数或变量)。链接过程就是将这些分散的目标文件和所需的库文件合并成一个可执行文件。C语言的编译和链接是一个复杂的过程,涉及多个步骤和工具。通过了解编译和链接的细节,你可以更好地掌握C语言的底层工作原理,并在编程中做出更明智的决策。在计算机编程中,编译和链接是将源代码转化为可执行文件的重要步骤。本文将详细介绍C语言的编译和链接过程,帮助你更好地理解这个过程。编译是将源代码(如C语言的.c文件)转化为目标文件(通常是.o文件)的过程。
2024-01-15 15:49:49 441
原创 C语言分支和循环语句详解
//switch语句的格式要求每个case后面都要有break,否则会连续执行多个case语句//switch语句的工作方式是:首先计算expression的值,然后查找与该值匹配的case标签。然后,我们使用do-while循环,先执行循环体内的代码(打印i的值并将i增加1),然后检查循环终止的条件(i是否小于或等于10)。在上面的语法中,condition表示循环执行的条件。与while循环不同的是,do...while循环至少会执行一次大括号 {} 中的语句,然后再检查条件是否为真。
2023-10-24 17:50:51 131 4
原创 用c语言实现百钱买百鸡问题
百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱。我们都知道,我们一般用穷值法,在for循环求多个符合条件的解,通常我考虑一些条件来减少循环的次数。这个最多是总价不超过100来算的,同时我们还可以考虑一方面每种鸡至少一个,加入可以变成。公鸡最多: (100-3-1/3)/5=19只。母鸡最多: (100-5-1/3)/3=31只。
2023-10-21 18:00:57 895 2
原创 c语言输出99乘法表
2.程序升级不仅可以只输出99还可以输出任意阶数。2.程序升级输出9*9还可以输出任意阶数。1.输出9*9标准乘法口诀表。1.输出9*9标准乘法口诀表。
2023-10-19 10:49:31 95 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人