- 博客(52)
- 收藏
- 关注
原创 Linux基础指令 四(apt,vim,git,cgdb)
本文介绍了Linux系统下的软件安装方式、vim编辑器使用、git版本管理工具和gdb/cgdb调试工具。主要内容包括: Linux软件安装的三种方式:源码安装、rpm包安装和包管理器(yum/apt)安装 vim编辑器的四种模式及常用命令集,包括移动光标、删除复制、替换撤销等操作 git版本管理的基本概念和指令,如克隆仓库、提交修改、解决冲突等 gdb/cgdb调试工具的使用方法,包括断点设置、变量查看、单步执行等调试技巧 文章提供了详细的命令示例和操作说明,适合作为Linux开发环境配置和使用的参考指南
2026-06-09 14:28:09
496
原创 Linux基础指令 三
本文介绍了Linux系统中的权限管理机制。权限由用户身份和文件属性共同决定,分为普通用户、root用户和文件所有者三类身份,文件属性包括读(r)、写(w)、执行(x)三种基本权限。文章详细讲解了用户管理命令(adduser/passwd/userdel)、身份切换(su/sudo)以及权限修改方法(chown/chgrp/chmod),特别说明了用数字表示权限的方式。对于目录权限,重点说明了r/w/x的不同作用及粘滞位(t)的特殊功能。最后提及权限掩码(umask)对新建文件权限的影响,以及共享文件的设定方
2026-06-09 14:25:58
192
原创 Linux基础指令 二
本文介绍了Linux系统中的常用基础指令,包括文件操作、内容查看、时间显示、搜索查找、别名设置、压缩解压等实用命令。 文件操作方面,详细讲解了echo输出和cat查看内容的重定向方法,以及cp拷贝和mv移动文件的使用。内容查看部分介绍了more、less分页浏览大文件,head和tail截取文件首尾内容。 文章还介绍了date时间格式显示、find/which/whereis/grep等搜索命令、alias别名设置、zip/unzip/tar压缩解压工具的使用方法。最后补充了tab补全、ctrl+c终止和c
2026-06-08 19:03:06
294
原创 异常(try,throw,catch)
本文介绍了C++异常处理机制的核心概念。异常处理通过throw抛出异常对象,由匹配的catch块捕获处理。异常抛出后会终止当前执行流程,若未找到匹配的catch则进行栈展开直至main函数。文章详细说明了异常捕获规则、栈展开过程、重新抛出异常的方法,以及noexcept关键字的使用注意事项。示例代码演示了异常抛出、捕获和重新抛出的典型用法,并强调了异常处理中资源管理的重要性,推荐使用RAII技术避免资源泄漏。
2026-05-15 17:13:31
58
原创 RAII与智能指针
摘要: RAII(资源获取即初始化)是一种利用对象生命周期管理资源的设计思想,确保资源在析构时自动释放,避免泄露。智能指针是RAII的典型应用,包括: unique_ptr:独占资源,禁止拷贝,支持移动; shared_ptr:共享资源,通过引用计数管理; weak_ptr:解决循环引用问题,不增加计数。 定制删除器可管理复杂资源(如文件、套接字)。make_shared优化内存分配,而循环引用需用weak_ptr避免内存泄漏。示例代码展示了智能指针的用法及陷阱。
2026-05-15 17:13:21
202
原创 C++11包装器(function和bind)
摘要:本文介绍了C++中的两种可调用对象包装器。std::function是一个类模板,可以统一存储不同类型的可调用对象(普通函数、仿函数、lambda表达式、成员函数等),调用空目标会抛出异常。bind函数模板用于调整可调用对象的参数顺序和数量,通过占位符_1、_2指定参数位置或固定参数值。文中提供了两者的基本用法示例代码,展示了如何包装各种函数类型以及如何使用bind进行参数绑定和调整。
2026-05-14 19:00:18
63
原创 C++11(lambda表达式)
Lambda表达式是C++中的匿名函数对象,格式为捕获列表->返回值{函数体}。核心特点包括:1)可定义在函数内部;2)常用auto接收返回值;3)最简形式为[]{}。捕获列表支持显式(值/引用捕获)和隐式(=/&)两种方式,可通过mutable修改形参。其本质是编译器生成的仿函数类,实现了operator()重载。相比仿函数,lambda更简洁,适合临时使用场景,但需要保持状态的场景仍建议使用仿函数。典型应用包括作为函数参数传递和就地执行匿名逻辑。
2026-05-14 19:00:17
44
原创 C++11(类的新默认函数,defult和delete)
本文介绍了C++11中的几个新特性:1)默认移动构造和移动赋值规则,当类未定义特定函数时会自动生成,对内置类型浅拷贝,自定义类型优先移动;2)default和delete关键字,用于显式控制默认函数的生成或删除;3)委托构造函数,允许构造函数调用同类其他构造函数来简化代码;4)继承构造函数,子类可直接继承父类构造函数。这些特性简化了类的设计,提供了更灵活的对象构造方式,同时保持了代码的简洁性和效率。
2026-05-13 16:42:05
62
原创 C++11(可变参数模板,emplace系列接口)
C++11可变参数模板摘要:C++11引入了可变参数模板,支持自定义模板参数数量,参数包分为模板参数包和函数参数包。通过sizeof...获取参数个数,支持0个参数。参数包展开采用递归方式,需定义终止函数。STL容器新增emplace系列接口,相比push/insert更高效,支持直接传入构造参数在容器中就地构造对象,避免临时对象创建。emplace_back和emplace可替代传统插入方法,提升性能。
2026-05-13 16:42:02
49
原创 C++11(左值和右值,移动语义,引用折叠,万能引用,完美转发)
本文系统介绍了C++中的左值、右值及其引用机制。左值表示持久数据,可获取地址;右值表示临时数据,不可取地址。左值引用使用&,右值引用使用&&,const左值引用可引用右值。右值引用通过move()可引用左值,用于延长临时对象生命周期和优化资源转移(移动语义)。右值分为纯右值和将亡值,引用折叠规则决定了多重引用的最终类型。万能引用通过模板参数T&&自动适配左右值,完美转发(forward)则保持参数的原始值类别。这些机制共同构成了现代C++高效资源管理的基础。
2026-05-12 19:12:28
185
原创 C++11(初始化)
摘要 C++11引入了{}统一初始化语法,支持内置类型、数组、结构体和自定义类的初始化。列表初始化省略=号,禁止窄化转换保证精度。对于容器类,通过initializer_list机制实现多元素初始化,其本质是维护指向数组头尾的指针。示例展示了从基本类型到复杂容器(map)的各种初始化场景,体现了C++11初始化语法的简洁性和一致性。
2026-05-12 19:12:21
53
原创 哈希表(负载因子,直接定址法,除留余数法,开放地址法,哈希桶)
哈希是一种通过哈希函数建立键值与存储位置映射关系的数据组织方式,核心是将键值转换为整型索引。负载因子(元素数/表大小)影响冲突概率和空间利用率,过高时需要扩容。常用哈希函数包括直接定址法(适用于键值集中)和除留余数法(建议表大小为质数)。哈希冲突处理方法主要有开放地址法(线性/二次/双重探测)和链地址法(冲突元素形成链表)。实际应用中如unordered_map采用链地址法,并在特定条件下进行树化优化。哈希表设计需平衡查询效率与内存开销。
2026-05-11 18:08:53
1181
原创 红黑树(RBT,插入,验证)
红黑树是一种自平衡二叉搜索树,通过颜色规则和旋转操作维持近似平衡。其核心规则包括:节点非红即黑、根节点为黑、无连续红节点、所有路径黑节点数相同。插入时先按二叉搜索树规则插入红色节点,若违反规则则通过变色和旋转调整(考虑父节点、祖父节点和叔节点情况)。验证时需检查颜色合规性、根节点颜色、红节点的子节点条件以及各路径黑节点数一致。相比AVL树,红黑树旋转次数更少,插入效率更高,两者时间复杂度同为O(logN)。
2026-05-11 18:08:47
33
原创 平衡二叉搜索树(平衡因子,旋转)
AVL树是一种高度平衡的二叉搜索树,其左右子树高度差不超过1,保证操作效率稳定在O(logN)。它通过平衡因子(右子树高减左子树高)监控平衡状态,当增删节点导致平衡因子超出±1范围时触发旋转调整。旋转分为四种情况:左单旋(RR失衡)、右单旋(LL失衡)、左右双旋(LR失衡)和右左双旋(RL失衡)。旋转操作能恢复平衡且不改变中序遍历顺序,每次仅调整最小不平衡子树,通过降低树高度维持高效查找性能。
2026-04-29 13:30:54
53
原创 map和set
本文介绍了C++中map和set这两种关联式容器的特性与用法。set用于存储唯一键值,底层由红黑树实现,支持高效的查找、插入和删除操作。map存储键值对(pair),同样基于红黑树,支持通过键快速访问值。两者都分为去重(set/map)和允许重复(multiset/multimap)版本。文章详细说明了它们的常用接口,包括迭代器操作、增删查功能,并介绍了pair结构体和C++17的结构化绑定特性,可以方便地处理组合数据类型。这些容器在需要快速查找和有序存储的场景中非常有用。
2026-04-29 13:30:52
160
原创 二叉搜索树(性质,增删查,Key/Value使用场景)
本文介绍了二叉搜索树(BST)的基本概念和操作。BST是一种满足左子树节点值≤根节点≤右子树节点值的二叉树,其查找、插入和删除的时间复杂度在最优情况下为O(logN),最差情况下为O(N)。文章详细说明了BST的三种核心操作:插入时根据值大小决定左右子树路径;查找类似二分查找;删除则根据子节点数量采取不同策略。此外还介绍了BST在键值对存储中的应用,并提供了完整的C++实现代码,包括插入、查找、删除和中序遍历功能。最后通过测试案例演示了BST的基本操作。
2026-04-28 10:20:51
54
原创 多态,虚函数,重写与协变,纯虚函数与抽象类
多态分为编译时多态(静态多态)和运行时多态(动态多态)。静态多态通过函数重载和模板实现,在编译时确定调用函数;动态多态则通过虚函数实现,允许基类指针或引用调用不同子类的重写函数。虚函数表存储虚函数地址,子类继承时会继承并可能修改虚表内容。纯虚函数使类成为抽象类,不能实例化,必须由子类实现。虚函数指针在运行时根据对象类型查找对应虚函数地址。多态机制提高了代码的灵活性和可扩展性。
2026-04-28 10:20:49
165
原创 模板(非类型模板参数,特化和分离编译)
摘要 本文介绍了C++模板编程中的非类型模板参数和模板特化技术。非类型模板参数允许使用常量作为模板参数,在C++20后支持浮点数、类对象和字符串。文章以STL中的array为例,展示了非类型模板参数的应用。模板特化分为函数模板全特化和类模板部分特化,通过定义更严格的模板版本实现特定类型的定制化处理。最后讨论了模板分离编译的注意事项,建议将声明和定义放在同一文件中以避免链接问题,必要时可进行显式实例化。这些技术为模板编程提供了更大的灵活性和针对性。
2026-04-27 15:14:13
41
原创 继承(模版继承,父子类转换,作用域,不能被继承的类,默认函数和静态成员,菱形继承和虚继承,继承和组合)
本文介绍了面向对象编程中的继承机制。主要内容包括:继承的概念(子类继承父类特性并扩展)、三种继承方式(public/protected/private)及其访问权限变化、类模板继承的特殊处理、父子类对象转换规则(包括切片现象)、作用域与同名成员处理、禁止继承的方法(私有构造/final关键字)、默认函数的继承特性、多继承和菱形继承问题及其解决方案(虚继承)。文章还比较了继承(is-a)和组合(has-a)的差异,建议优先使用组合降低耦合度,仅在需要多态时使用继承。通过代码示例详细说明了各类继承场景下的实际应
2026-04-27 15:14:10
244
原创 C++栈和队列的常用接口,以及优先队列和双向队列
摘要:本文介绍了三种容器适配器(stack、queue、priority_queue)和双端队列deque的特性与用法。stack和queue分别遵循先进后出和先进先出原则,限制数据访问方式;priority_queue则保持堆结构,确保队首为最大值。三者都是容器适配器,默认使用deque作为底层容器。deque支持双端高效增删,但空间不连续导致遍历效率较低。文章详细列举了各容器的常用接口操作,包括构造、增删查改等方法,并比较了不同容器的性能特点。
2026-04-18 11:23:41
51
原创 C++的list常用接口(构造,迭代器,容量,增删改查)
本文介绍了C++ STL中的list容器特性及基本操作。list是一种基于双向链表的顺序容器,支持O(1)时间复杂度的任意位置增删操作,但不支持随机访问。文章详细说明了list的构造函数使用方式,包括空构造、指定元素构造、拷贝构造和区间构造等。同时介绍了list的迭代器类型(begin/end/rbegin/rend)和基本操作方法,如push_back/push_front等插入删除操作,以及size/empty等容量查询方法。由于链表特性,list没有预分配容量等操作。
2026-04-18 11:23:30
35
原创 C++的string常用接口(构造,访问与遍历,容量,修改)
C++ string类封装了字符串操作,解决了C语言字符串的安全性和易用性问题。它支持多种编码格式(string/utf-8、u16string/utf-16等),提供丰富的成员函数,包括构造、访问、容量管理(size/capacity/resize等)和修改操作(+=/insert/erase等)。支持三种遍历方式(下标/迭代器/范围for),并包含查找(find/rfind)、比较(compare/operator==)和子串截取(substr)等功能。string类通过自动管理内存避免了越界访问,其面
2026-04-17 11:29:35
58
原创 C++的vector常用接口(构造,访问,扩容,增删查改)
本文介绍了C++中vector容器的基本用法。vector相比string设计更规范,支持多种构造方式(无参、拷贝、移动、迭代器区间等)。访问元素可通过数组风格、迭代器或范围for循环。vector在元素满时会自动扩容,不同编译器扩容策略不同,可通过reserve()预留空间。常用操作包括:push_back/pop_back(尾插尾删)、insert/erase(指定位置增删)、find查找等。注意扩容可能导致迭代器失效,erase操作会返回新的有效迭代器。vector还支持size/capacity查询
2026-04-17 11:29:32
38
原创 迭代器概念
迭代器概述与使用要点 迭代器是STL中类似指针的对象,提供统一的容器访问方式,使算法与容器结构解耦。主要分为四类:普通迭代器、只读迭代器、反向迭代器和只读反向迭代器。容器迭代器分为随机访问迭代器(vector/string/deque)和双向迭代器(list/set/map),前者支持随机访问,后者仅支持双向移动。使用时需注意vector插入/删除操作会导致迭代器失效,特别是扩容时所有旧迭代器都会失效。正确使用迭代器能提高代码的通用性和安全性,是STL算法与容器协同工作的关键。
2026-04-16 13:40:20
39
原创 STL六大组件
STL是C++标准模板库的核心组件,包含六大模块:容器(分为序列式、关联式和无序关联三类)、迭代器(连接容器与算法)、算法(通用数据处理函数)、仿函数(重载operator()的类)、配接器(修改现有组件接口)和空间配置器(底层内存管理)。STL提供了高效的数据结构和算法实现,如vector动态数组、map键值对容器、sort排序算法等,通过迭代器统一访问方式,并支持定制化操作。其模块化设计使开发者能灵活组合使用,提升代码复用性和开发效率。
2026-04-16 13:39:51
63
原创 模板(模板函数与模板类)
本文介绍了C++模板函数和类模板的基本概念与使用方法。主要内容包括:1)函数模板的定义格式和实例化方式(隐式/显式实例化);2)模板参数的匹配原则,非模板函数优先于同名模板函数;3)类模板的定义与实例化,强调类模板必须显式指定类型参数。通过代码示例展示了模板的使用场景,如类型无关的Swap函数实现、模板与非模板函数共存时的调用规则,以及类模板成员函数的定义方式。模板技术是泛型编程的基础,能够提高代码复用性和灵活性。
2026-04-15 08:55:03
40
原创 auto和范围for
本文介绍了C++11中的auto关键字和范围for循环特性。auto用于自动类型推导,可以声明变量、指针和引用(需加&),但不能声明数组或作为函数参数。范围for循环简化了数组/容器的遍历,支持auto自动推导类型,若要修改元素需使用引用。这些特性提高了代码简洁性和安全性,底层实现分别基于类型推导和迭代器机制。
2026-04-15 08:54:42
30
原创 C++内存管理(new和delete)
本文介绍了C/C++内存管理的基础概念和实现方式。主要内容包括:内存布局(内核空间、栈、堆、数据段等);C语言的malloc、calloc、realloc和free函数使用方法;C++的new/delete操作符及其底层原理(通过operator new/delete调用malloc/free);new[]/delete[]处理对象数组时的特殊机制;以及定位new表达式(placement-new)的显式构造函数调用方法。重点比较了C与C++在动态内存管理上的差异,特别是new/delete对自定义类型构造
2026-04-14 16:42:45
228
原创 类与对象概念的补充(类型转换,静态成员,友元,内部类,匿名对象,拷贝合并优化)
本文摘要: 类型转换:介绍C++内置类型与类类型之间的隐式转换机制,需通过构造函数实现,11标准支持多参数转换。explicit关键字可禁止隐式转换。 static成员:静态成员属于类而非对象,需类外初始化,静态函数无this指针只能访问静态成员。 友元机制:通过friend声明突破封装限制,包含友元函数和友元类,会提高耦合度需慎用。 内部类:定义在类内部的独立类,默认是外部类友元,受外部类域限制,常用于专属服务场景。 匿名对象:临时对象生命周期仅限当前行,常用于函数参数或临时调用。 编译器优化:现代编译器
2026-04-14 16:42:19
250
原创 C++类的初始化列表与缺省值
本文介绍了C++类初始化列表和成员变量缺省值的用法。初始化列表用于在构造函数体执行前初始化成员变量,特别是引用成员、const成员和无默认构造的类成员必须使用初始化列表。初始化列表的执行优先于构造函数体,后者会覆盖前者。C++11支持在成员声明时设置缺省值,当成员未被初始化列表显式初始化时,将使用缺省值或默认构造。内置类型未初始化可能产生随机值,而无默认构造的自定义类型会导致编译错误。合理使用初始化列表和缺省值能提高代码的可读性和安全性。
2026-04-13 17:43:01
52
原创 类的默认成员函数
本文总结了C++类的6种默认成员函数及其特性:1)构造函数用于对象初始化,包含无参、有参和全缺省三种形式;2)析构函数负责资源清理,自动调用且不可重载;3)拷贝构造函数通过引用参数避免递归调用,需注意深浅拷贝问题;4)赋值运算符重载支持对象间赋值,需处理自赋值情况;5)取地址重载通常使用编译器默认实现;6)C++11新增的移动构造和移动赋值通过右值引用高效转移资源。文章通过代码示例详细说明了各类成员函数的实现要点,特别强调了资源管理类需要同时实现析构、拷贝和赋值操作的必要性。
2026-04-13 14:16:40
1941
原创 运算符重载和成员函数指针
C++运算符重载允许为自定义类型定义运算符行为。运算符重载函数由operator关键字和运算符组成,保持原运算符的优先级和结合性。参数个数与原运算符一致(一元一个参数,二元两个参数),建议使用const引用参数。成员函数版本默认第一个参数为this指针。后置++需添加int形参,输入输出流运算符需定义为全局函数。成员函数指针需通过类域限定获取地址。示例展示了==、++等运算符的重载实现方式及成员函数指针的声明方法。
2026-04-12 21:13:44
50
原创 类与对象概念
本文介绍了C++类的核心概念,主要包括:1. 类的定义方式及访问控制修饰符(public/private/protected);2. 类与命名空间的作用域区别;3. 类的实例化过程及内存分配规则;4. this指针的工作原理及其隐含传递机制;5. 类指针的特性及空指针调用的风险。文章还对比了C++与C语言在封装性上的差异,强调C++通过访问控制实现更安全的封装,而C语言则允许直接访问结构体成员。全文通过代码示例详细说明了类方法定义、成员访问、this指针使用等关键知识点。
2026-04-12 20:08:08
229
原创 c++引用
C++引用的本质是为变量创建别名,与指针不同但密切相关。引用必须初始化且不可改变指向,与原始变量共享内存地址。引用传参能直接修改原变量,比指针更简洁安全。传引用返回需谨慎,避免返回局部变量引用导致野指针问题。const引用可延长临时变量生命周期并自动类型转换,常用于函数参数设计。引用虽不能完全替代指针,但在许多场景下提供了更优雅的解决方案,同时受限于类型安全和对象生命周期等C++核心规则。
2026-04-11 14:09:26
574
原创 C++的一些基础概念
本文主要介绍了C++编程中的几个关键概念:变量作用域(全局域、局部域、类域、命名空间域)、输入输出优化技巧(cout与printf的区别及效率提升方法)、函数特性(缺省参数、重载规则、栈帧机制)、数组越界风险、inline函数与宏函数的对比,以及nullptr的引入背景。重点内容包括:通过sync_with_stdio(false)等方法提升IO效率;函数重载的区分标准;栈帧的工作原理;数组越界可能导致的隐患;inline函数的优缺点及使用场景;C++11引入nullptr解决NULL在指针上下文中的歧义问
2026-04-11 14:08:01
780
原创 c语言数据结构
单向遍历:定义left和right两个指针,分别指向数组的开头和结尾,再定义一个cur指针,初始指向left,向右遍历,如果cur小于基准,就与left交换,cur和left右移,若大于基准,就与right交换,right左移。二叉堆:将一个集合中的元素按照完全二叉树的结构储存在一维数组中,下标从0开始,满足Ki<=K2i+1,Ki<=K2i+2,称为最小堆,满足Ki>=K2i+1,Ki>=K2i+2,称为最大堆,同一组数据按不同的插入顺序,会产生不同的堆结构,但性质一致。
2026-04-10 19:36:20
227
原创 C语言指针复习
主要用于二维数组中,比如声明了二维数组指针int(**p)=arr[m][n],那么*(*(p+i)+j)表示先将p加i个一维数组的长度,再解引用得到该一维数组的首地址,再加j个元素的长度,得到arr[i][j]的值。指针数组与数组指针:int*p[n]中,[]会先与p结合,声明了一个int*类型的数组,大小为n,而int(*p)[n]则会先认为要声明一个指针p,指向的是一个大小为n的int数组的整个地址。指针:*是解引用,&是取地址,*&可以互相抵消,而指针就相当于是p=&变量,变量=*p。
2026-04-09 20:39:55
31
原创 c语言基础补足
本文摘要:文章系统讲解了C语言中的内存对齐机制和动态内存管理。详细介绍了结构体对齐规则(包括嵌套结构体和柔性数组)、联合体的内存共享特性,以及malloc、calloc、realloc和free等动态内存操作函数的使用要点。同时阐述了指针使用中的常见陷阱,并解析了C程序从预处理到链接的完整编译过程,包括宏定义的注意事项和条件编译的使用方法。内容涵盖了内存优化、程序编译原理等核心知识点,对深入理解C语言底层机制具有重要参考价值。
2026-04-07 17:07:52
202
原创 内存管理简介
内存管理支持多道程序并发执行,通过地址变换实现逻辑地址到物理地址的转换。主要功能包括内存分配与回收(连续/非连续分配)、保护共享及虚拟内存扩充。程序处理分为编辑、编译、链接、装入和运行阶段。装入方式有绝对装入(效率高但利用率低)、静态重定位(地址映射固定)和动态重定位(现代标配)。分配管理采用分页(固定页大小)和分段(按逻辑划分)方式,分别解决内部和外部碎片问题。内存扩充技术包括覆盖、交换和虚拟内存(含缺页中断和淘汰算法)。
2025-11-27 14:44:01
355
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅