自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深入解析Linux进程概念与操作系统核心

本文摘要:计算机系统遵循冯诺依曼体系结构,由输入单元、中央处理器(CPU)、内存和输出单元组成,所有设备只能直接与内存交互。操作系统(OS)作为管理软件,负责管理硬件资源并为用户程序提供稳定环境,其核心功能包括进程管理、内存管理等。进程是程序执行的实例,由内核数据结构(如task_struct)和代码数据组成,通过PCB进行管理。进程状态包括运行、阻塞、挂起等,僵尸进程和孤儿进程是两种特殊状态,需通过系统调用(如wait())进行回收处理。

2025-09-02 22:49:52 821

原创 Linux开发必备:yum/vim/gcc/make全攻略

本文介绍了Linux系统下的软件包管理工具(yum/apt)、文本编辑器Vim、编译器gcc/g++和自动化构建工具make/Makefile的基本使用方法。主要内容包括:1)使用yum/apt进行软件包的安装、查看和卸载;2)Vim编辑器的三种模式切换及常用命令;3)gcc编译器的四个编译阶段和链接方式(静态/动态);4)Makefile的基本语法规则和自动化构建流程。这些工具是Linux系统下进行软件开发和项目管理的基础,掌握它们能有效提高开发效率。文章通过实例详细说明了各工具的基本操作方法和注意事项,

2025-09-01 22:22:47 795

原创 掌握Linux基础指令:从入门到精通

本文介绍了Linux系统的基本指令和权限管理。主要内容包括:1. 常用文件操作指令(ls、pwd、cd、touch、mkdir、rm、cp、mv等)的使用方法和常用选项;2. 文件查看指令(cat、more、less、head、tail)的功能和参数;3. 文件查找和压缩解压指令(find、which、grep、zip/unzip、tar)的使用;4. Linux权限概念,包括用户分类、文件权限表示方法(字符和数字)、权限设置命令(chmod、chown、chgrp);5. 目录权限管理和粘滞位的作用。文章

2025-09-01 07:45:00 958

原创 C++ IO流:从基础到实战全解析

本文介绍了C/C++中的输入输出流机制。首先分析了C语言的scanf和printf函数及其缓冲区原理,解释了缓冲区在提高可移植性和实现"行"读取中的作用。然后阐述了"流"的概念及其在C++中的实现方式,包括标准输入输出流对象(cin/cout)的使用要点和自定义类型输入输出的重载方法。详细讲解了C++文件IO流操作,涵盖ifstream、ofstream和fstream类的使用方法,以及二进制文件读写技术。最后重点介绍了stringstream类的功能,包括数值类型格

2025-08-27 12:53:32 833

原创 C/C++类型转换全解析

本文介绍了C++中的四种类型转换机制。相比C语言的隐式和显式转换,C++提供了更安全、语义更明确的四种转换方式:static_cast用于相关类型间的转换;reinterpret_cast用于位模式重新解释;const_cast用于修改const/volatile属性;dynamic_cast用于多态类型的运行时安全转换。文章详细分析了每种转换的适用场景、优势及注意事项,强调应避免滥用强制类型转换,特别是危险的reinterpret_cast。最后通过面试题总结了四种转换的应用场景,帮助开发者根据具体需求选

2025-08-27 08:00:00 1010

原创 C++类设计技巧与单例模式解析

本文介绍了C++中几种特殊类的设计方法:1. 禁止拷贝的类:C++98通过私有化拷贝构造和赋值运算符实现,C++11使用=delete语法;2. 堆/栈专属类:通过控制构造函数和operator new/delete的访问权限实现;3. 不可继承类:C++98私有化构造函数,C++11使用final关键字;4. 单例模式的两种实现:饿汉模式(程序启动即创建)和懒汉模式(首次调用时创建),重点介绍了线程安全的懒汉模式实现,包括双重检查锁定机制。这些设计模式增强了代码的安全性和可控性,适用于特定场景需求。

2025-08-26 13:54:25 836

原创 智能指针原理与实战解析

智能指针是C++中用于自动管理动态内存的重要工具,通过RAII(资源获取即初始化)技术确保资源在对象生命周期结束时自动释放。传统指针在异常发生时容易导致内存泄漏,而智能指针能有效解决这一问题。C++提供了多种智能指针:unique_ptr(独占所有权,禁止拷贝)、shared_ptr(共享所有权,引用计数)、weak_ptr(解决循环引用问题)。auto_ptr由于设计缺陷已被弃用。智能指针通过重载*和->运算符模拟指针行为,同时支持自定义删除器管理非new对象或数组。make_shared和make

2025-08-26 10:37:11 1344

原创 C++异常处理全解析

C语言传统错误处理方式包括终止程序(如assert)和返回错误码(如errno),但存在用户友好性和查找困难等问题。C++引入异常机制,通过throw抛出异常、try/catch捕获处理,支持异常重新抛出和安全规范。异常体系可采用自定义继承结构(如Exception基类派生各类异常)或标准库异常。异常优点在于错误信息清晰、调用链处理便捷,但存在执行流混乱、性能开销和资源管理风险。实际开发中应规范使用,通过基类继承统一异常类型,并用throw()声明函数异常规范以避免滥用。需注意构造函数和析构函数中的异常安全

2025-08-25 11:19:45 782 1

原创 C++11新特性全面解析(万字详解)

C++11核心特性摘要 列表初始化:支持统一初始化语法{},适用于内置类型、自定义类型及STL容器,结合std::initializer_list简化容器构造。 类型推导: auto:自动推断变量类型,需显式初始化。 decltype:获取表达式类型,用于模板编程。 智能指针:引入unique_ptr、shared_ptr等,自动管理内存,避免泄漏(需后续专题详解)。 右值引用与移动语义: 区分左值/右值,通过&&实现高效资源转移(移动构造/赋值)。 std::move强制转为右值,std:

2025-08-24 20:06:25 960

原创 C++哈希表:unordered_map与unordered_set全解析

本文介绍了C++中unordered系列关联式容器的底层实现原理。重点分析了unordered_map和unordered_set的哈希表结构,包括哈希冲突的两种解决方法:闭散列(开放定址法)和开散列(链地址法)。文章详细讲解了哈希函数设计原则,并通过代码示例展示了线性探测和链地址法的具体实现。对于闭散列,解释了线性探测的原理和伪删除法的必要性;对于开散列,说明了如何通过单链表解决冲突,并讨论了扩容策略。最后比较了两种方法的优缺点,指出链地址法在存储空间利用上的优势。全文通过大量代码示例,帮助读者深入理解哈

2025-08-23 20:51:20 910

原创 STL关联式容器解析:map与set详解

文章摘要:STL中的关联式容器(如map、set等)与序列式容器的主要区别在于其存储的是键值对结构,采用红黑树实现,具有高效的数据检索能力。文章详细介绍了关联式容器的特性,包括键值对概念、四种树形结构容器(map/set/multimap/multiset)的特点与使用方式,重点分析了set和map的实现原理及接口。最后展示了如何基于红黑树模拟实现map和set,包括迭代器设计、模板参数处理和核心操作实现。关联式容器通过有序存储和高效查找(O(logN)时间复杂度)满足了特定场景下的数据管理需求。

2025-08-22 20:41:17 1181 2

原创 深入解析红黑树:原理与实现

红黑树是一种自平衡二叉搜索树,通过节点颜色(红/黑)和特定规则确保最长路径不超过最短路径的两倍。其核心性质包括:根节点为黑、红色节点不连续、所有路径黑色节点数相同。插入操作分为标准BST插入和颜色调整两步,调整分为多种情况(叔叔节点红/黑)。与AVL树相比,红黑树不追求绝对平衡,插入和旋转次数更少,适合频繁修改的场景。文中提供了完整的C++实现代码,包括节点定义、旋转操作和插入逻辑。

2025-08-22 13:21:37 851

原创 AVL树:平衡二叉搜索树的奥秘(手撕代码)

本文详细介绍了AVL树(平衡二叉搜索树)的概念与实现。AVL树通过平衡因子(左右子树高度差绝对值≤1)保证树的平衡性,使查找效率维持在O(logn)。文章重点讲解了AVL树的插入和删除操作:插入时通过四种旋转(左单旋、右单旋、左右双旋、右左双旋)调整平衡;删除操作更复杂,需结合二叉搜索树删除逻辑和平衡因子调整。文中提供了完整的C++代码实现,包括节点结构定义、旋转函数及插入删除接口,并强调了维护父指针和平衡因子的重要性。AVL树通过严格平衡控制,有效解决了普通二叉搜索树退化为链表的问题。

2025-08-21 13:43:52 986

原创 二叉搜索树的实现与应用详解

本文系统介绍了二叉搜索树(BST)的实现与应用。首先阐述了BST的基本概念和性质:左子树节点值均小于根节点,右子树节点值均大于根节点。重点讲解了BST的三大核心操作实现:查找、插入和删除,包括代码实现和不同情况的处理逻辑(如删除节点时的直接删除和替换法)。其次分析了BST的两种应用模型:K模型(纯键值存储)和KV模型(键值对存储),并提供了完整代码实现。最后讨论了BST的性能特点,指出在平衡情况下操作时间复杂度为O(logn),但在最坏情况下会退化为O(n),为后续介绍AVL树和红黑树等平衡二叉搜索树做铺垫

2025-08-20 11:35:09 918

原创 深入理解C++多态原理

本文系统介绍了C++多态的核心概念与实现机制。主要内容包括:1)多态的定义与构成条件,通过基类指针/引用调用虚函数时产生不同行为;2)虚函数的重写规则与两个特例(协变和析构函数重写);3)C++11的override和final关键字;4)抽象类与纯虚函数的接口继承特性;5)多态的实现原理(虚函数表机制);6)单继承与多继承下的虚表结构;7)动态绑定与静态绑定的区别。文章还解答了多态相关的常见面试问题,如虚函数表生成时机、虚析构函数必要性等,全面剖析了C++多态从语法到底层实现的全貌。

2025-08-19 21:09:50 1079

原创 深入理解C++继承机制

本文系统介绍了C++中的继承机制。主要内容包括:继承的基本概念和定义,基类与派生类的对象赋值转换规则,继承中的作用域问题,派生类默认成员函数的生成规则,继承与友元、静态成员的关系。重点分析了复杂的菱形继承及其带来的数据冗余和二义性问题,提出了通过虚拟继承(使用虚基表和虚基表指针)的解决方案。最后总结了继承与组合的区别,建议优先使用组合降低耦合度,仅在需要表达"is-a"关系或实现多态时使用继承。文章还提供了相关笔试面试题的解答要点。

2025-08-19 14:49:50 879

原创 深入浅出C++模板编程(进阶)

本文主要介绍了C++模板编程中的关键概念和技术要点。首先阐述了非类型模板参数的使用限制(如浮点数、类对象等原本不能作为参数,但C++20有所放宽)。其次详细讲解了模板特化的两种形式:函数模板特化(必须完全特化)和类模板特化(包括全特化和偏特化),并通过日期比较的实例说明了特化的实际应用。然后分析了模板分离编译导致链接错误的原因,提出了将声明定义合并在头文件中的解决方案。最后总结了模板的优点(代码复用、灵活性)和缺点(代码膨胀、错误信息难读)。全文通过丰富代码示例,系统性地介绍了模板技术的核心知识点。

2025-08-19 08:00:00 793

原创 深入解析C++ STL中的容器适配器(含模拟实现)

本文介绍了C++标准库中三种容器适配器:stack、queue和priority_queue的实现原理及使用方式。stack基于后进先出(LIFO)原则,默认使用deque作为底层容器;queue遵循先进先出(FIFO)原则,同样默认采用deque;priority_queue则是基于堆结构实现,默认使用vector作为底层容器。文章详细分析了各适配器的接口设计,包括push、pop、top等核心操作,并比较了不同底层容器的优缺点。重点讲解了priority_queue的仿函数机制和自定义排序规则实现方法,

2025-08-18 16:51:26 1114

原创 深入理解C++中的list容器(含模拟实现)

本文介绍了C++中list容器的特性、使用方法和底层实现原理。list是一种基于双向循环链表的序列容器,具有高效的任意位置插入/删除能力,但不支持随机访问。文章详细讲解了list的构造方式、迭代器使用、元素访问及修改操作,并重点分析了迭代器失效问题。通过模拟实现list的核心功能,包括节点结构、迭代器封装和基本操作(如push_back、insert、erase等),揭示了带头双向循环链表的设计优势。最后对比了list与vector的特性差异:list适合频繁插入删除的场景,而vector更适合随机访问操作

2025-08-18 10:35:42 825

原创 C++ vector类操作全解析(含模拟实现)

本文详细介绍了C++标准库中的vector容器及其模拟实现。主要内容包括:1. vector的基本特性:动态数组、连续存储、自动扩容机制(不同编译器采用1.5倍或2倍增长策略);2. vector的基本操作:构造方法(默认构造、拷贝构造等)、迭代器使用(正向/反向迭代器)、空间管理(resize/reserve);3. 增删查改操作:push_back/pop_back、insert/erase、find等,特别强调了迭代器失效问题;4. vector的模拟实现:框架设计(三个指针维护)、关键接口实现(re

2025-08-17 11:39:08 1145

原创 C++ string类操作全解析(含模拟实现)

本文介绍了C++中string类的重要性及其实现原理。首先对比了C语言字符串操作的不足:需手动管理内存、不符合面向对象思想。string类提供了更安全便捷的字符串操作,包括构造、容量管理、访问修改等接口。重点剖析了string类的模拟实现:1)深拷贝解决浅拷贝问题;2)现代写法通过swap优化赋值效率;3)详细实现了reserve、push_back、append等核心功能;4)介绍了写时拷贝机制。文章还对比了传统与现代实现方式的优劣,为理解和自定义字符串类提供了完整的技术路径。

2025-08-16 15:48:41 737

原创 深入浅出C++模板编程(初阶)

本文介绍了C++中的泛型编程与模板技术。主要内容包括:1)函数模板的概念与实现,通过模板可以避免函数重载带来的代码冗余;2)函数模板的原理是编译器根据实参类型生成特定版本函数;3)模板实例化的两种方式(隐式和显式)及参数匹配原则;4)类模板的定义格式和使用方法,类模板需要通过指定类型参数进行实例化。文章通过交换函数和动态顺序表示例,展示了模板在提高代码复用性和可维护性方面的优势。

2025-08-16 09:38:27 645

原创 深入解析C/C++内存管理与动态分配

本文系统介绍了C/C++中的内存管理和动态内存分配机制。首先分析了C/C++程序内存区域划分(栈、堆、数据段、代码段等),然后详细讲解了C语言的动态内存管理函数(malloc/calloc/realloc/free)及其区别。重点阐述了C++的new/delete操作符,包括其与malloc/free的关键区别:new/delete会自动调用构造函数/析构函数。文章还深入探讨了operator new/delete的实现原理,定位new表达式的作用,以及常见的内存泄漏问题。最后通过对比表格总结了malloc

2025-08-15 20:36:29 1077

原创 C++类与对象核心知识点全解析(下)

本文深入探讨了C++面向对象编程中的关键概念。首先分析了构造函数的初始化列表与构造函数体的区别,强调初始化列表的重要性。接着讲解了static成员的特性及其应用场景,包括实现对象计数功能。文章还详细介绍了友元机制(友元函数和友元类)以及内部类的定义和使用规则。此外,还探讨了匿名对象的应用、编译器对拷贝构造的优化策略,最后从计算机认识实体的角度重新阐释了封装的意义。这些核心概念对于深入理解C++面向对象编程至关重要。

2025-08-15 18:29:51 961 1

原创 C++类与对象核心知识点全解析(中)【六大默认成员函数详解】

C++类中的6个默认成员函数包括:构造函数、析构函数、拷贝构造函数、赋值运算符重载、取地址运算符重载和const取地址运算符重载。构造函数负责对象初始化,可重载,若无显式定义则生成默认无参构造函数。析构函数负责资源清理,自动调用,需手动释放动态分配的资源。拷贝构造函数实现对象复制,默认浅拷贝,资源管理需自定义深拷贝。赋值运算符重载支持对象赋值,默认浅赋值,资源管理需自定义。const成员函数修饰this指针保证不修改对象状态。

2025-08-14 20:36:55 906

原创 C++类与对象核心知识点全解析(上)

本文介绍了C++面向对象编程的核心概念,重点讲解了类与对象的基础知识。文章首先对比了C语言面向过程和C++面向对象的区别,详细说明了类的定义方式、访问限定符(public/private)、封装特性、类作用域和实例化过程。在内存模型方面,分析了类对象大小的计算规则和内存对齐原则,指出成员变量决定对象大小,成员函数存储在代码段。最后深入解析了this指针的工作原理,包括其作为隐藏参数的传递机制、特性和使用注意事项,并通过实例分析了this指针为空时的不同行为表现。这些内容构成了C++面向对象编程的基础知识体系

2025-08-14 11:14:22 556

原创 C->C++核心过渡语法精讲与实战

本文介绍了C++对C语言的扩展与优化,重点讲解以下核心特性:1. 命名空间解决了全局作用域中的命名冲突问题,支持嵌套定义和三种使用方式(作用域限定符、using引入部分成员、using namespace引入全部成员);2. C++输入输出使用iostream库,通过cout/cin和流运算符实现类型自适应的IO操作;3. 缺省参数支持全缺省和半缺省(必须右起连续),提高了函数灵活性;4. 函数重载通过参数类型/数量/顺序区分同名函数,其底层实现依赖编译器对函数名的修饰规则;5. 引用作为变量别名,必须初始

2025-08-13 21:00:55 1216

原创 七大排序算法全解析:从入门到精通

本文系统介绍了排序算法概念与实现。排序是将记录按关键字大小排列的操作,分为内部排序(内存中)和外部排序(数据过大)。算法特性包括时间复杂度、空间复杂度和稳定性(相同元素相对位置不变)。重点分析了插入排序(直接插入O(n²)稳定、希尔排序O(n^1.3)不稳定)、选择排序(直接选择O(n²)不稳定、堆排序O(nlogn)不稳定)、交换排序(冒泡O(n²)稳定、快速排序O(nlogn)不稳定)以及归并排序(O(nlogn)稳定)。特别对快速排序的三种实现(挖坑法、左右指针法、前后指针法)和非递归实现进行详解,并

2025-08-13 11:39:17 1316 1

原创 深入解析二叉树(包含堆结构)数据结构

树是一种非线性数据结构,由节点组成层次关系集合,具有根节点、子树、节点度等概念。二叉树是特殊的树结构,每个节点最多有两个子节点,分为满二叉树和完全二叉树。二叉树可以通过顺序存储(数组)或链式存储(链表)实现。堆是一种特殊的完全二叉树,分为大根堆和小根堆,支持插入、删除等操作,时间复杂度为O(logn)。二叉树的遍历包括前序、中序、后序和层序遍历,其中层序遍历需要借助队列实现。

2025-08-12 19:35:09 1019

原创 深入解析栈与队列:数据结构基础

本文介绍了栈和队列两种数据结构的基本概念及实现方式。栈是遵循后进先出(LIFO)原则的线性表,支持在栈顶进行压栈和出栈操作,通常使用数组实现更优。队列则是遵循先进先出(FIFO)原则的线性表,在队尾入队、队头出队,采用链表实现效率更高。文中提供了两种数据结构的具体C++模板类实现代码,包含基本操作如push、pop、empty等,并详细说明了各自的特点和适用场景。栈的实现利用了动态数组扩容机制,而队列则采用链表节点连接方式实现。

2025-08-12 16:19:20 174

原创 链表的知识总结以及模拟实现

本文介绍了链表的基本概念、分类及实现方法。链表是一种非连续、非顺序的物理存储结构,通过指针实现数据元素的逻辑顺序。文中重点分析了链表的三种分类方式(单向/双向、带头/不带头、循环/非循环),并详细讲解了无头单向非循环链表和带头双向循环链表的实际应用场景。文章还以C++为例,展示了链表的实现过程,包括节点结构定义、链表类的基本操作(尾插尾删、头插头删、查找、指定位置插入删除等)。最后对比了顺序表与链表的区别,突出了链表在动态内存管理方面的优势。

2025-08-12 16:00:28 293

原创 顺序表的总结及模拟实现

摘要:本文介绍了线性表和顺序表的基本概念及实现。线性表是n个相同特性数据元素的有限序列,逻辑上线性连续,物理上可离散存储。顺序表采用连续存储单元实现,分静态和动态两种。文章重点使用C++模拟实现动态顺序表,包括初始化、扩容检查、头尾插删、查找修改等功能接口,并分析了顺序表的优缺点:支持高效随机访问(O(1))但插入删除需移动元素(O(N)),扩容可能造成空间浪费。顺序表适合频繁查询场景,其连续存储特性也使其具有较高的存储密度和缓存友好性。

2025-08-12 12:08:08 968

原创 类和对象(下)

四.友元。

2024-06-16 16:59:16 1104

原创 类和对象(中)

讨论: 关于编译器生成的默认成员函数,很多童鞋会有疑惑:不实现构造函数的情况下,编译器会生成默认的构造函数。但是看起来默认构造函数又没什么用?d对象调用了编译器生成的默认构造函数,但是d对象_year/_month/_day,依旧是随机值。也就说在这里编译器生成的默认构造函数并没有什么用??

2024-06-16 16:53:34 1020

原创 类和对象(上)

类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员时,需要使用 ::作用域操作符指明成员属于哪个类域。

2024-06-11 21:09:01 1147 1

原创 c++入门必备基础

不能作为函数的参数。

2024-06-11 21:03:22 1008

原创 栈和队列的实现

1.头文件代码实现:2.各接口函数函数的实现:(1):初始化和销毁

2024-05-13 18:57:31 248 1

原创 关于“旋转字符串”的两种解题方法

前面的1,2,3,4也倒置成4,3,2,1.这样就变成了4,3,2,1,7,6,5.再将整体倒置,我们发现,就变成了5,6,7,1,2,3,4,这不就是我们想要的结果吗?这里有两种代码实现,共同思路都是后三个元素:5,6,7放到临时数组变量的前三个,再将前面的1,2,3,4,5放到后面,要注意k的值可能比数组元素个数大,所以我们要求出实际要旋转的个数,即k=k-(k/n)*n。

2024-04-26 20:30:00 244 2

原创 双向带头循环链表的接口函数实现

/指定位置之后插入。void LTNInsertAfter(LTNode* pos, DataType x)//指定位置之后插入。void LTNPushFront(LTNode* phead, DataType x)//头插。void LTNPushBack(LTNode* phead, DataType x)//尾插。LTNode* LTNFInd(LTNode* phead, DataType x)//查找。void LTNInit(LTNode** phead)//初始化,创建头结点。

2024-04-15 17:19:14 714

原创 单链表接口函数的实现(增删查改)

void SLTInsert(SLTNODE** phead, SLTNODE* pos, DataType x)//待定位置之前的插入。void SLTErase(SLTNODE** phead, SLTNODE* pos)//删除待定节点。void SLTPushFront(SLTNODE** phead, DataType x)//头插。SLTNODE* SLTFind(SLTNODE* phead, DataType x)//查找。

2024-04-15 16:54:53 881 1

空空如也

空空如也

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

TA关注的人

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