自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 19.优先级队列容器priority_queue

摘要:优先级队列是一种按元素优先级操作的数据结构,每次取出优先级最高/最低的元素。C++中的priority_queue容器默认用最大堆实现,支持push、pop、top等核心操作,时间复杂度为O(logn)。可通过模板参数指定最小堆(使用greater比较器)。该容器不提供迭代器,只能访问堆顶元素,适合频繁获取最值的场景。示例代码演示了基本操作,包括初始化、插入、删除和查询。

2025-11-15 21:23:20 568

原创 Linux下如何使用git工具

本文介绍了Git的基本使用方法:1)安装Git并验证版本;2)在代码平台创建仓库;3)首次使用需配置用户名和邮箱;4)通过clone命令获取远程仓库;5)使用add命令添加文件到本地仓库;6)用commit提交并添加日志信息;7)通过push推送至远程仓库。此外还介绍了git log查看日志、git pull同步更新及.gitignore文件过滤机制。掌握这些操作即可完成基本的Git版本控制操作。

2025-11-11 19:17:47 1005

原创 Linux工具介绍——调试工具gdb/cgdb

本文介绍了gdb/cgdb调试工具的常见使用方法。首先说明编译debug版本需添加-g选项。调试功能包括:启动退出、查看代码(行/函数)、运行程序、断点管理(设置/查看/删除/禁用)、单步调试(逐过程/逐语句)、变量操作(查看/追踪/修改)以及跳转控制(函数返回/断点跳转/指定行跳转)。同时介绍了cgdb的可视化界面优势。这些功能为C程序调试提供了全面支持,能够有效定位和修复代码问题。

2025-11-05 13:49:19 927

原创 Linux工具介绍——自动化构建工具make/Makefile

本文介绍了make工具和Makefile文件的基本使用方法。Makefile通过定义依赖关系和依赖方法实现自动化编译:1.依赖关系用冒号表示,依赖方法为具体编译指令;2.支持多层依赖关系和特殊符号$@、$^;3.使用.PHONY修饰伪目标实现重复编译;4.通过变量定义和通配符支持多文件编译。Makefile能有效管理大型项目的编译流程,只需修改少量配置即可复用。掌握Makefile编写是大型工程开发的重要能力。

2025-11-04 19:49:12 963

原创 Linux工具介绍——编译工具gcc/g++

本文介绍了gcc/g++编译工具的使用方法和编译过程。详细说明了C/C++程序从源代码到可执行文件的四个步骤:预处理、编译、汇编和链接,并解释了每个步骤的作用。文章还演示了如何通过命令行选项控制编译过程的每个阶段,并比较了一键编译和分步编译的差异。最后介绍了动态库和静态库的区别,以及动态链接和静态链接的特点。通过实例展示了如何生成预处理文件(.i)、汇编文件(.s)、目标文件(.o)和最终可执行文件,帮助读者深入理解程序编译的原理和过程。

2025-11-02 21:20:53 1197

原创 【算法】——动态规划之01背包问题

摘要 本文系统介绍了01背包问题及其变式应用。背包问题分为01背包、完全背包和多重背包,本文聚焦于01背包问题。通过模板题讲解了动态规划的状态表示(dp[i][j]表示前i个物品体积不超过j的最大价值)和状态转移方程,并展示了滚动数组优化方法。随后通过三道例题(分隔等和子集、目标和、最后一块石头的重量Ⅱ)演示如何将实际问题转化为01背包模型,分别对应求等和子集存在性、目标和组合数、最小剩余重量问题。文章强调转化问题的关键在于识别"选/不选"的决策模式,并提供优化后的代码实现,展现了01背

2025-10-28 18:20:40 1386

原创 Linux工具介绍——软件包管理器和编辑器Vim

本文介绍了Linux系统下的软件包管理器和Vim编辑器。在软件包管理部分,讲解了yum和apt两种常用包管理器的功能,包括查看、安装和卸载软件包的操作方法。在Vim编辑器部分,详细说明了三种工作模式(命令模式、插入模式、底行模式)及其切换方式,列举了常用的光标移动、文本编辑、查找替换等操作指令,并介绍了vimrc配置文件的简单配置方法。这些工具和技巧能有效提升Linux环境下的开发效率。

2025-10-24 12:00:00 897

原创 Linux权限

本文介绍了Linux系统中的权限管理机制。主要内容包括:1)Linux用户分类(root和普通用户)及切换方法;2)文件访问者类型(拥有者、所属组、其他人)和基本权限(读、写、执行);3)权限修改指令(chmod、chown、chgrp)及其使用方法;4)umask掩码对新建文件权限的影响;5)目录权限的特殊性。文章强调root用户拥有最高权限,普通用户需通过sudo提权,并详细说明了不同权限对文件和目录的影响及修改方式,为Linux用户提供了实用的权限管理指导。

2025-10-23 16:37:15 932

原创 Linux基本指令(续)

本文介绍了Linux常用指令的用法,包括:1)时间日期相关(date、cal);2)文件查找(find/which/whereis);3)命令别名(alias);4)文本搜索(grep);5)进程管理(top);6)压缩解压(zip/unzip/tar);7)文件传输(rz/sz、scp);8)系统信息(uname);9)常用快捷键(Tab、Ctrl组合键);10)关机重启(shutdown)。文章还简要解释了shell的工作原理,指出其作为命令行解释器在用户与内核间的桥梁作用。这些指令涵盖了Linux基础

2025-10-23 15:12:38 1089

原创 18.set容器和map容器

本文介绍了C++中的关联式容器map/set和序列式容器的区别,重点讲解了set和map的使用方法。set是基于红黑树实现的有序集合,支持去重和排序;map是键值对容器,通过红黑树保持key有序。两者都支持迭代器遍历和增删查改操作,但map还提供了operator[]用于快速访问和修改value。multiset和multimap允许元素重复,但multimap不支持operator[]操作。文章详细说明了这些容器的构造方式、常用接口及使用场景,帮助开发者更好地应用这些高效的关联式容器。

2025-10-16 18:07:10 1208

原创 17.二叉搜索树

本文介绍了二叉搜索树(BST)的概念与实现。二叉搜索树是一种左子节点值小于等于根节点、右子节点值大于等于根节点的有序二叉树。其查找、插入、删除操作最理想时间复杂度为O(logN),最差退化为O(n)。文章详细讲解了BST的类定义、插入、查找和删除操作,重点分析了删除节点时需处理的四种情况:左右子树为空、左子树为空、右子树为空以及左右子树均不为空的情况,并提供了对应算法实现。通过模拟实现,展示了二叉搜索树的基本特性和操作方法。

2025-10-15 18:21:56 1152

原创 【算法】——动态规划之多状态dp问题

本文系统介绍了动态规划中的多状态问题,通过8个典型例题展示了不同场景下的解决方案。主要包括:按摩师/打家劫舍问题(建立两个DP表表示选择/未选状态)、删除点数问题(转化为打家劫舍模型)、粉刷房子问题(三色状态转移)、股票买卖系列(含冷冻期、手续费、交易次数限制等复杂状态)。这些问题的核心在于准确分析状态转移关系,建立多个DP表进行状态跟踪,并通过初始化条件和转移方程求解最优解。文章提供了完整的代码实现和状态转移分析,帮助理解多状态DP问题的解决思路。

2025-10-12 21:30:00 1219 1

原创 【算法】——动态规划之路径问题

本文介绍了四种动态规划路径问题的解法:1.不同路径问题使用二维DP表,通过状态转移方程dp[i][j]=dp[i-1][j]+dp[i][j-1]求解;2.带障碍物的路径问题需在有障碍物时置dp值为0;3.下降最小路径和问题需考虑三个方向的转移;4.地下城游戏问题采用逆向DP,从终点反推起点。文章强调了多开空间处理边界值的技巧,以及根据不同问题特点调整状态转移方程的重要性,为动态规划路径问题提供了系统性的解题思路。

2025-10-11 21:55:58 1526

原创 16.C++三大重要特性之多态

本文详细讲解了C++中的多态特性,重点分析了运行时多态的实现原理。主要内容包括:1)多态分为编译时多态和运行时多态,后者通过虚函数实现;2)多态的实现条件包括基类指针/引用调用和虚函数重写;3)虚函数表机制是运行时多态的核心,存储虚函数地址;4)重写、重载和隐藏的区别;5)纯虚函数和抽象类的作用;6)静态绑定与动态绑定的区别。文章通过实例代码详细说明了虚函数表的工作原理,以及继承关系中虚函数的覆盖机制。

2025-10-08 18:16:10 1305

原创 15.C++三大重要特性之继承

本文系统介绍了面向对象编程中的继承机制。主要内容包括:1)继承的基本概念、三种继承方式及其权限变化;2)派生类与基类的转换规则;3)派生类默认成员函数的实现特点;4)静态成员、友元与继承的关系;5)多继承引发的菱形继承问题及虚继承解决方案;6)继承与组合的对比分析。文章通过代码示例详细说明了public继承的典型应用场景,并强调实践中应优先使用组合以降低耦合度。最后指出,虽然继承存在一定缺陷,但在实现多态等场景中仍是必要手段。

2025-10-05 21:14:52 881

原创 【算法】——动态规划算法及实践应用

本文介绍了动态规划算法的核心思想与实现步骤。动态规划通过将大问题拆解为小问题并存储中间结果来避免重复计算。其实现步骤包括:定义状态表示、找出状态转移方程、初始化、确定计算顺序和返回结果。文章通过三个例题(泰波那契数、三步问题、解码方法)详细讲解了如何应用这五个步骤:建立dp表,推导状态转移方程,处理边界条件,最终得到结果。这些例题展示了动态规划从简单到复杂的应用,建议通过更多练习来巩固这一算法思想。

2025-10-04 20:53:37 1546

原创 14.模板进阶

本文介绍了C++模板的进阶应用,主要包括非类型模板参数、模板特化和模板分离编译三部分。非类型模板参数允许使用常量作为模板参数;模板特化可针对特定类型进行特殊处理,包括函数模板特化和类模板特化(全特化与偏特化);分离编译问题源于模板需要在编译时实例化,建议将模板声明和定义放在同一文件中。这些技巧能帮助开发者更灵活地使用模板,提升代码的复用性和效率。

2025-10-01 17:03:19 938

原创 13.stack容器和queue容器

本文介绍了C++中的stack(栈)和queue(队列)两种容器适配器。stack实现先进后出结构,默认基于deque实现,主要接口包括push、pop、top等;queue实现先进先出结构,同样基于deque,提供类似的接口操作。两者都是容器适配器,不能直接初始化,需传入底层容器对象。文章还简要介绍了deque(双端队列)的混合结构特性,它结合了数组和链表的优势,但并非完美替代品。最后通过图示说明了deque的底层实现机制,帮助读者理解这些常用容器的特性和使用方法。

2025-09-29 20:30:10 984 1

原创 【算法】——分治思想与快速排序的实践应用

本文介绍了快速排序算法及其应用。快速排序采用分治思想,通过选取基准值、分区和递归三个步骤实现,时间复杂度为O(n*lgn)。文章详细讲解了Hoare方法和三区间划分两种实现方式,并给出C++代码示例。通过三个实例展示了快速排序的实际应用:颜色分类问题、数组排序和TopK问题。在解决TopK问题时,快速排序能通过舍弃无关区间显著提高效率。文章配有代码示例和详细解释,帮助读者理解快速排序的实现原理和实际应用场景。

2025-09-27 15:39:07 1348 11

原创 12.list容器

本文介绍了C++ STL中的list容器,重点讲解了其双向链表的特性及常用接口。list支持多种构造函数、迭代器遍历(包括单向、双向和随机迭代器),并提供头尾操作、插入删除等基本功能。文章特别强调了list与vector的不同之处:插入不会导致迭代器失效,但不支持随机访问。此外还介绍了list特有的操作如splice拼接、remove移除、sort排序(内部归并实现)、unique去重(需先排序)和merge合并(需有序链表)。对于大数据量排序,建议先转存vector处理再转回list以提高效率。全文系统梳

2025-09-26 14:25:55 1148

原创 11.vector的模拟实现

本文通过模拟实现vector容器的核心功能,详细讲解了vector的底层架构和关键实现细节。主要内容包括:1)使用三个迭代器(_start、_finish、_endofstorage)作为成员变量的实现方式;2)构造、拷贝构造和析构函数的实现;3)size()、capacity()等基础接口的实现;4)重点分析了reserve()扩容时的深拷贝问题,以及insert/erase操作中的迭代器失效问题及解决方案;5)完整实现了push_back、pop_back、operator[]、swap等常用接口。文章

2025-09-23 22:30:16 1255

原创 10.vector容器

本文介绍了C++ STL中的vector容器,包括其基本概念、接口使用和注意事项。vector作为顺序表容器,与string类似但更简洁。文章详细讲解了构造函数、迭代器、容量管理、元素访问等核心接口,并对比了vector与string的差异。重点指出vector不支持直接字符串操作,但可通过嵌套实现多维结构。同时介绍了C++11的initializer_list初始化方式。最后强调vector适合通用数据存储,而字符串操作仍需使用string。通过本文可快速掌握vector的核心用法。

2025-09-21 16:53:55 890

原创 Linux基本指令

本文继续介绍Linux基本指令,包括man查询手册、echo输出/输入重定向、cat文件查看、cp文件复制、mv文件移动等常用命令。同时讲解more/less分页查看、head/tail首尾查看等文件操作技巧。补充知识部分重点阐述"Linux一切皆文件"的设计理念,以及管道(|)实现命令组合的原理。文章通过具体示例演示了各项指令的用法,帮助读者掌握Linux基础操作。

2025-09-20 18:05:00 1630

原创 09.string的模拟实现

本文详细介绍了C++中string类的模拟实现过程。通过自定义命名空间ddd,实现了包括构造函数、拷贝构造、容量管理(size/capacity)、元素访问(operator[])、迭代器、字符串操作(push_back/append/insert/erase)、查找(find/substr)以及流操作(operator<<>>/getline)等核心功能。重点解决了内存管理、扩容策略、'\0'处理、性能优化等问题,并比较了strcpy与memcpy的区别。该实现深入剖析了strin

2025-09-18 21:41:26 1215

原创 08.string(二)

摘要:本文介绍了C++中string类的常用接口,包括迭代器(iterator/const_iterator及其反向版本)、容量操作(size/length/capacity等)、修改方法(push_back/append/insert等)。重点讲解了迭代器类型区分、容量调整策略以及字符串操作方法。最后通过两道例题(字符串替换和大数相加)展示了string的实际应用。文章强调某些接口的时间复杂度问题,并建议查阅参考网站获取更详细的重载方法说明。

2025-09-16 20:08:03 1109

原创 07.string(一)

【摘要】本文介绍了C++ STL中的string类。作为标准模板库的核心组件,string类解决了C语言字符串操作的局限性,提供了更便捷的字符串管理方式。文章重点讲解了string类的构造函数、operator[]重载、迭代器遍历等核心功能,并介绍了C++11新增的auto关键字和范围for循环特性,这些特性使string操作更加简洁高效。通过对比传统数组遍历和迭代器遍历,阐述了迭代器在容器操作中的通用性优势。全文旨在帮助开发者掌握string类的现代C++用法,提升字符串处理效率。

2025-09-14 17:57:21 837

原创 06.模板初阶

本文介绍了C++中的泛型编程概念及其实现方式。主要内容包括:1. 泛型编程通过模板实现代码复用,解决函数重载带来的代码冗余和维护问题;2. 函数模板的使用格式和原理,包括隐式/显式实例化及参数匹配规则;3. 类模板的定义和使用方法,强调类模板必须显式实例化。文章通过交换函数和栈类的示例,展示了模板如何根据不同类型生成特定版本的函数和类,从而编写与类型无关的可复用代码。模板机制将重复工作交给编译器处理,提高了代码效率和可维护性。

2025-09-13 21:18:09 703 2

原创 05.内存管理

摘要:本文系统介绍了C++内存管理机制,主要内容包括:1)内存分区(栈、堆、静态区、常量区)及其特性;2)对比C的malloc/free与C++的new/delete,重点分析new/delete对类对象的构造/析构自动调用优势;3)深入解析operator new/delete的底层实现机制及其异常处理;4)介绍定位new表达式在内存池中的应用场景。文章最后总结了malloc/free与new/delete的6大核心区别,强调new/delete在类型安全、自动初始化和异常处理等方面的优势,为C++开发者

2025-09-13 19:20:12 1020

原创 04.带你认识类和对象(下)

本文深入探讨了C++中构造函数的使用方法,重点介绍了初始化列表的用法及其优势,包括必须使用初始化列表的三种变量类型。文章还讲解了类型转换、static成员、友元、内部类、匿名对象等特性,并通过代码示例展示了这些特性的实际应用。最后讨论了编译器在对象拷贝时的优化策略,建议优先使用构造加拷贝构造的方式。全文内容涵盖了C++面向对象编程中的多个重要概念,对提高编程效率和代码质量具有指导意义。

2025-09-12 21:06:32 1452

原创 03.带你认识类和对象(中)

这篇文章继续进行C++类和对象的学习,内容主要是六个默认成员函数。

2025-09-10 21:15:48 713

原创 02.带你认识类和对象(上)

本文介绍了C++面向对象编程中类的核心概念。主要内容包括:1)类与对象的引入,对比面向过程与面向对象编程思想;2)类的定义方式、访问限定符(public/private/protected)和类域特性;3)类的实例化过程及对象内存分配规则;4)this指针的工作原理;5)C++类与C结构体的对比,强调封装特性对数据保护的重要性。文章通过代码示例说明类如何将数据和方法封装在一起,并通过访问控制实现更安全的编程模式,体现了面向对象编程的优势。

2025-09-02 21:31:47 941

原创 初识Linux

Linux系统因其开源特性而备受程序员推崇。文章介绍了Linux的发展历程,从1991年诞生到1994年1.0版本的成熟跨越。重点分析了Linux的优势:代码公开透明安全、社区维护高效、性能稳定适合服务器、免费使用成本低。文章还讲解了常用Linux指令,包括clear、pwd、ls、cd、mkdir、touch、rmdir和rm等基础操作,帮助初学者快速入门。掌握Linux系统对于程序员具有重要意义。

2025-08-23 19:12:35 972

原创 01.C++入门

c++在c语言发展的基础上,添加了面向对象编程的特性,包括类、封装、继承、多态等核心概念,并且c++兼容c语言中的绝大部分语法,所以c语言的程序一般在c++环境下仍可使用。但实际上在编译程序时两者用的编译器是不同的。并且C++有一套自己的输入输出所以C++学习需要先学习一些基础知识,了解C++新加入的特性。

2025-08-22 17:26:22 1192 4

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除