自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux 实战:从零实现动态进度条(含缓冲区原理与多版本优化)

其中动态光标只与调用的这个函数有关,不管进度条动不动,他都是得转动的。还有就是大家如果想再优化一下的话可以试着把 = 替换成 色块 这样会更加清晰,其它的优化大家也可以自己想想尝试一下。为了方便编译和清理,编写 Makefile 实现自动化构建,只需一条命令即可生成可执行文件:我们在之前讲过。在动手写代码前,必须先理清 3 个关键概念,否则容易出现 “进度条不刷新”“换行错乱” 等问题。:虽然没显示出来,但是我们的C语言默认是顺序结构的,一定是先执行。的进度条,核心分为头文件、实现文件、主函数三部分。

2026-02-13 17:56:09 526

原创 Makefile 完全指南:从入门到工程化,自动化构建不再难

能否编写 Makefile,从侧面反映了一个人是否具备完成大型工程的能力。在一个工程中,源文件数量众多,并按类型、功能、模块分别存放在不同目录中。Makefile 定义了一系列规则,用于指定哪些文件需要先编译、哪些需要后编译、哪些需要重新编译,甚至支持更复杂的操作。Makefile 的核心优势在于自动化编译。一旦编写完成,只需执行make命令,整个工程即可自动完成编译,极大地提高了软件开发效率。make是一个命令行工具,用于解释 Makefile 中的指令。

2026-02-13 16:46:55 610

原创 GCC/G++ 编译器完全指南:从编译流程到进阶用法(附实操案例)

特性动态库(小蚂蚁电竞馆)静态库(个人电脑)资源使用共享,节省资源独占,浪费资源依赖性强依赖,库缺失则全崩独立,自给自足更新维护更新库即更新所有程序每个程序需重新编译内存占用多个程序共享同一份每个程序都有一份拷贝现实世界类比编程世界: 现实世界:│ 动态库 │ │ 共享网吧 ││ (共享函数集合) │ │ (共享电脑资源) ││ ││ 多个程序共用 │ 多个顾客共用│ 库缺失=所有程序挂掉 │ 网吧关门=所有人都不能上网│ ││ 静态库 │ │ 个人电脑 │。

2026-02-09 23:16:46 964

原创 Vim 编辑器入门到实用:程序员必备文本编辑技能(附vim一键配置方案)

Vim 的核心特色是 “模式化”,不同模式对应不同操作场景,所有操作都围绕模式切换展开,记住 “Esc 键回归命令模式” 是关键。),如果正常退出这个文件会自动删除掉,异常退出的话这个文件会保留,可以考这个文件恢复。其实一共是有12种模式的。这里先讲三种比较核心的,后面还会补充几种。:(只用把root改成你需要的用户名就行)

2026-02-09 22:21:25 650

原创 Linux 基础开发工具入门:软件包管理器的全方位实操指南

软件包:提前编译好的可执行程序、配置文件及依赖库的集合(类似 Windows 的安装包),不同 Linux 发行版对应不同格式,如 CentOS 的.rpm、Ubuntu 的.deb。包管理器yum:适用于 CentOS、RedHat、Fedora 等基于 RPM 包的发行版;apt:适用于 Ubuntu、Debian 等基于 DEB 包的发行版。

2026-02-06 18:47:10 635

原创 Linux 权限管理进阶:从 umask 到粘滞位的深度解析

细节问题不同的系统,不同的用户,umask可能不同(上面讲过)不用担心umask被更改的问题,退出登录,重登就会恢复默认当需要创建一批文件并想要它们的默认权限符合我们的预期时,umask就很好用了;那如何创建和删除一批文件呢(我们后续也可能会用到,这里先看看),注意下面的演示。# 此时的umask是 0077,能让下面所有文件都达到不让所属组和other有任何权限的目的。# 创建一批文件total 4.................... #省略# 删除一批文件total 4。

2026-02-06 16:12:43 616

原创 Linux 权限实战:从概念到命令,搞定文件访问控制的核心逻辑

身份匹配只匹配一次,比如whb又是文件的所有者又是所属组,那如果他所有者的权限没有w(写),就算所属组的权限有写也没用,只匹配一次。这里关于添加组啥的操作就不演示了,文末的思维导图里有,大家感兴趣也可以自己下去查阅学习一下,现在来说组操作其实用的也比较少了。所属组是whb,具有读写的权限。,可将三类访问者的权限用 “三位八进制数字” 表示(所有者 + 所属组 + 其他用户),格式:chmod 数字权限 文件名。:进行“完整的登录切换”,会模拟一次完整的登录过程,包括切换工作目录和加载目标用户的环境变量。

2026-02-06 15:45:08 613

原创 Linux :指令收尾!从 “会敲” 到 “懂原理”,Shell 和内核的交互秘密都在这

功能:打包/解包,不打开它,直接看内容参数组合:(这里需要注意 -f后不能再加别的参数)tar -czf:静默打包并压缩目录,适合脚本中后台执行(不输出过程信息)tar -xzf:静默解压 .tar.gz 格式的压缩包,快速恢复文件:指定解压目录,避免文件散落在当前目录(-C 后接目标路径)tar -cvzf:带详细输出的打包压缩(-v 参数显示每个处理的文件)tar -xvzf:带详细输出的解压(适合确认解压内容是否正确)实际案例。

2026-02-06 14:40:00 847

原创 Linux 进阶指令实操指南:文件查看、时间管理、搜索压缩全场景覆盖(附高频案例)

tail指令从指定点开始将文件写到标准输出,使用tail命令的 -f 选项可以方便的查阅正在改变的日志文件,tail -f filename 会把 filename 里最尾部的内容显示屏幕上,并且不断刷新,使你看到最新的文件内容。就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head用来显示档案的开头至标准输出中,而tail想当然就是看档案的结尾。:查看小文件,小算法,小配置文件,很短的代码都可以用cat。但是查看大文件时,cat就不好用了,在后面会给大家其它的指令来查看大文件。

2026-02-04 03:17:45 1185

原创 Linux:7 个高频指令精讲 + 重定向从入门到精通

功能:为长命令设置简短别名,提升操作效率。完整语法设置:alias 别名=‘命令 [选项]’(等号前后无空格)查看:alias(列出所有别名)删除:unalias 别名取消所有别名案例# 设置别名:ls -alh → ll(显示隐藏文件+详细列表+人性化大小)[root@VM-0-2-centos ~]$ ll # 直接使用total 40Kdrwx------ 5 whb whb 4.0K Oct 12 15:30 . # 隐藏的当前目录。

2026-02-04 02:54:27 620

原创 C++:智能指针完全指南(原理、用法与避坑实战,从 RAII 到循环引用)

auto_ptr:是 C++98 时设计出来的智能指针,特点是拷贝时把拷贝对象的资源的管理权转移给拷贝对象,这是一个非常糟糕的设计,因为它会导致被拷贝对象悬空、访问报错的问题。C++11 设计出新的智能指针后,强烈建议不要使用auto_ptr,实际上在 C++11 出来之前很多公司也是明令禁止使用这个智能指针的。unique_ptr:是 C++11 设计出来的智能指针,名字翻译为 “唯一指针”。特点是不支持拷贝,只支持移动。如果不需要拷贝的场景就非常建议使用它。shared_ptr。

2026-02-02 23:27:15 869

原创 C++11:异常完全指南(从语法到实战,优雅处理程序错误)

在大型项目中,直接抛出基本类型(如字符串、整数)的异常难以区分错误类型,推荐自定义异常类体系(基于继承),统一异常接口,便于管理和扩展。// 一般大型项目程序才会使用异常,下面我们模拟设计一个服务的几个模块// 每个模块的继承都是Expection的派生类,每个模块可以添加自己的数据// 最后捕获的时候,我们捕获基类就可以,通过多态可以打印不同信息public:,_id(id){ }return _id;

2026-01-31 13:58:14 742

原创 Linux:6 个 Linux 基础指令的硬核拆解,原理 + 实操一次吃透!

mkdir的工作逻辑是:根据你指定的路径,在对应的位置 “创建一个新的索引文件”,并给这个文件标记 “目录属性”(让系统知道这是文件夹,不是普通文件)。另外,rm-f选项的 “强制删除” 逻辑:如果文件有 “只读权限”(,默认删除会提示 “是否删除只读文件”,用这个就能跳过提示,直接删除 —— 这个参数方便,但也更危险,一定要确认文件可以删再用。在 Linux 里,“文件夹” 本质是一种 “特殊的文件”—— 它不存具体内容,只存 “里面包含的文件 / 文件夹的索引”。需要存文件却没有文件夹?

2026-01-31 01:21:15 997

原创 C++11:类新功能、lambda与包装器实战

去接受。

2026-01-30 01:29:11 671

原创 C++11:引用折叠、完美转发与可变参数模板实战

C++11 以后对传统的 “左值 / 右值” 进行了更精细的划分: 参考文档:Value categories - cppreference.com二. 引用折叠:万能引用底层逻辑C++ 不允许直接定义 “引用的引用” 如( ),但通过模版或 间接构成时,会触发引用折叠规则,这也是"万能引用"的核心原理。以 int 为例:实际示例:模板参数并非单纯的右值引用,结合引用折叠后,可接收左值和右值,称为 “万能引用”:我们拿前面博客中实现过的的 来改改看,里面还涉及到完美转发,下

2026-01-27 01:54:14 575

原创 C++11:列表初始化 + 右值引用与移动语义(附完整代码)

左值引⽤已经解决⼤多数场景的拷⻉效率问题,但是有些场景不能使⽤传左值引⽤返回,如addStrings,generate函数,C++98中的解决⽅案只能是被迫使⽤输出型参数解决。显然是不可能的,因为这⾥的本质是返回对象是⼀个局部对象,函数结束这个对象就析构销毁了,右值引⽤返回也⽆法改变对象已经析构销毁的事实。C++11是C++的第二个主要版本,并且是从C++98起的最重要更新。我们知道引用可以延长对象生命周期,那么临时对象和匿名对象的生命周期可以通过右值引用来延长,const的左值引用也行,但是不能修改。

2026-01-22 00:47:06 610

原创 C++:哈希表封装 myunordered_map/myunordered_set (底层原理 + 完整实现)

和unordered_set,SGI-STL30版本是C++11之前的STL版本,这两个容器是C++11之后才更新的。但是SGI-STL30实现了哈希表,只容器的名字是hash_map和hash_set,他是作为非标准的容器出现的,非标准是指非C++标准规定必须实现的,源代码在。myunordered_map 和 myunordered_set 复用同一哈希表底层,核心通过。SGI-STL30版本源代码中没有。

2026-01-20 13:02:27 658

原创 C++:哈希表的两种灵魂(深入探索开放定址与链地址法的核心机密)

假如哈希表中已经映射存储了N个值,哈希表的大小为M,那么通过负载因子 = N/M,负载因子有些地方也翻译为载荷因子/装载因子等,他的英文为 load factor。我们将关键字映射到数组中位置,一般是整数好做映射计算,如果不是整数,我们要想办法转换成整数,这个细节我们后面代码实现中再进行细节展示。下面哈希函数部分我们讨论时,如果关键字不是整数,那么讨论的Key是关键字转换成的整数。链地址法的核心:哈希表数组存储链表头指针,冲突元素链接成链表(哈希桶),不占用其他位置。的核心,主流分为 开放定址法。

2026-01-19 13:29:02 592

原创 C++:手把手实现 STL Set/Map(从零编写一棵红黑树到完整容器封装)

由于 T 的类型不固定(K 或 pair),红黑树插入 / 查找时无法直接获取 key,需通过仿函数。map支持[]主要修改insert返回值支持,修改RBTree中的insert返回值为。这里实现一下,- - 的话就不展示了,要实现的话还需要额外带一个_root;STL 中 map 和 set 复用同一颗红黑树的核心是。SGI-STL30版本源代码,map和set的源代码在。,平衡维护逻辑与基础红黑树一致:包括迭代器,:大家可以自己看看STL源码剖析。,支持 map 的 [])和。

2025-12-27 23:37:10 684

原创 C++:unordered_map/unordered_set 使用指南(差异、性能与场景选择)

核心接口与 map/set 完全兼容,上手零成本:(这里仅展示部分接口,剩下的可以看看文档,还有些和map/set不一样的后续讲实现的时候还会再进行补充的。系列的接口分别是跟哈希桶和负载因子相关的接口,日常使用的角度我们不需要太关注,后面学习了哈希表底层,我们再来看这个系列的接口,一目了然。和 unordered_set 是 C++11 引入的关联式容器,底层基于 哈希表(哈希桶)一般来说,后面三个参数我们都不需要传。

2025-12-27 23:19:40 711

原创 C++:红黑树从入门到进阶(4 条规则如何筑牢 O (logN) 效率根基?)

红黑树用 4 条颜色规则实现“近似平衡”,既避免了AVL 树的频繁旋转,又将效率稳定在 O (logN),成为 STL、内核等场景的 “首选树结构”。但规则背后的平衡逻辑、插入时的变色与旋转组合,常让人困惑。本文从规则本质出发,拆解插入全场景,帮你理清红黑树如何用简单约束撑起高效性能。红黑树的节点需存储键值对、左右子指针、父指针(用于回溯平衡)和颜色标记// 枚举结点颜色Red, // 红色结点Black // 黑色结点// 红黑树结构// 存储键值对(Key-Value)

2025-12-23 23:11:17 709

原创 C++:解构 AVL 树(平衡核心、旋转策略与高效实现技巧)

在二叉搜索树(BST)中,若插入顺序有序(如递增或递减),树会退化为链表,导致增删查效率从O(logN)骤降至O(N)。为解决这一问题,AVL 树(自平衡二叉搜索树)应运而生 —— 它通过控制左右子树的高度差(平衡因子),确保树始终保持 “高度平衡”,从而稳定维持O(logN)的高效操作。本文将从 AVL 树的核心概念切入,结合完整代码实现,详解插入逻辑、平衡因子更新与四种旋转操作,帮你彻底掌握这一经典数据结构。AVL 树是一种特殊的二叉搜索树二叉搜索树特性。

2025-12-22 12:11:27 567

原创 C++:STL map 系列全方位解析(从基础使用到实战进阶)

map 是一种 “键值对(Key-Value)” 容器,每个元素包含一个不可修改的键(Key) 和一个可修改的值键唯一:相同的 Key 无法重复插入;自动排序:遍历map时(走的中序),元素会按 Key 的升序(默认用less<Key>比较)排列。map的参考文档map// map 模板定义template <class Key, // 键的类型(Key)class T, // 值的类型(Value,typedef 为 mapped_type)

2025-12-19 13:10:58 759

原创 C++:STL set 系列完全指南(从底层原理、核心接口到实战场景)

STL 容器的设计围绕 “数据如何存储与访问” 展开,序列式与关联式容器的核心差异体现在存储逻辑与访问方式上,具体对比如下:补充说明:set 与 multiset 底层均基于红黑树(一种自平衡二叉搜索树)实现,这一结构赋予它们以下核心特性:set的声明:参考文档:set - C++ Referenceset的构造相关接口:三. set 核心接口实战:基于实操代码详解下面会通过多个测试函数覆盖 set 的核心操作,我们结合代码解析其使用方法与注意事项。set 支持多种插入方式,插入后自动去重并

2025-12-18 19:36:41 779

原创 C++:二叉搜索树(BST)完全指南(从概念原理、核心操作到底层实现)

二叉搜索树又称二叉排序树,它要么是空树,要么是满足以下值分布规则若左子树不为空,则左子树中所有节点的值 ≤ 根节点的值;若右子树不为空,则右子树中所有节点的值 ≥ 根节点的值;左、右子树也分别是二叉搜索树(递归定义)。二叉搜索树可以支持插入相等的值,也可以不支持插入相等的值,具体看使用场景定义,后续我们学习map/set/multimap/multiset系列容器底层就是二叉搜索树,其中map/set不支持插入相等值,multimap/multiset支持插入相等值关键特性。

2025-12-16 19:34:32 877

原创 C++:抽象类与多态原理深度解析,从纯虚函数到虚表机制(附高频面试题)

虚函数:与普通函数一样,编译后是一段机器指令,存储在代码段;虚表中仅存储虚函数的 “地址”,而非函数本身;虚表:本质是 “存储虚函数地址的指针数组”,在 VS 等编译器中存储在代码段(常量区)(因内容不可修改),C++ 标准未强制规定存储位置,不同编译器可能有差异。printf("栈:%p\n", &i);printf("静态区:%p\n", &j);printf("堆:%p\n", p1);printf("常量区:%p\n", p2);

2025-12-16 12:11:44 747

原创 C++:多态详解(从概念本质、语法规则到底层实现,结合实战代码的全方位指南)

类成员函数前加virtual关键字,该函数即为虚函数(非成员函数和静态成员函数不能加virtual虚函数的作用是 “标记” 该函数需要参与多态,让编译器为其生成动态绑定逻辑。// 基类:Personpublic:// 虚函数:标记为需要参与多态virtual void BuyTicket() { cout << "买票-全价" << endl;

2025-12-15 23:41:14 931

原创 C++:继承特殊场景解析(友元、静态成员与菱形继承的底层逻辑)

在C++中,基类的友元函数/类无法直接访问派生类的私有成员。这就像"你父亲的朋友,不等于你的朋友",友元关系不具有继承性。如果需要让友元访问派生类成员,必须在派生类中重新声明一下友元。具体示例:核心结论:基类的静态成员(静态变量/静态函数)在整个继承体系中仅存在一份,派生类和基类共享该成员,不会因为继承而产生多个。这与非静态成员不同 —— 非静态成员每个对象一份。核心结论(前两个前面讲过):单继承:一个派生类只有⼀个直接基类时称这个继承关系为单继承多继承:一个派生类有两个或以上直接基类时称这个

2025-12-11 15:19:34 932

原创 C++ :继承入门(从基础概念到默认成员函数,吃透类复用的核心逻辑)

先想一个场景:Student 和 Teacher 都需要 “姓名、地址、身份认证”,但 Student 有学号、Teacher 有职称。如果各自写一遍,代码会很冗余 —— 继承就是把“公共部分”抽成父类(基类),子类(派生类)直接复用。本篇博客代码示例中所需头文件代码仓库继承 - Gitee.com关键是 “继承方式 + 父类名”,比如 class Student : public Person。class默认私有继承,struct默认公有继承,推荐显式写继承方式(比如public。

2025-12-08 19:55:24 731

原创 C++:模板进阶(从非类型参数到分离编译,吃透 C++ 泛型编程的核心逻辑)

非类型模板参数,就是用编译期可确定的常量作为模板的参数,在模板内部可以直接当常量使用。其中比较典型的例子就是 STL 中的array实际案例1.固定数组大小//模板进阶private:T _a[N];int _top;int main()//10//1000,那是不是就不够,只能改上面的定义,但是改的之后上面的st1就很浪费return 0;用非类型模板参数进行改进//非类型模板参数--很好的解决了上面的问题private:T _a[N];int _top;

2025-12-07 16:45:39 556

原创 C++:priority_queue(藏在堆里的 “优先级管家”)

本质基于 “堆” 数据结构实现,核心特性是 “始终让堆顶元素为当前容器中优先级最高的元素”,默认按 “大堆” 规则排序(即堆顶为最大值)。底层容器需支持 “随机访问迭代器” 和以下操作,STL 中默认使用。(空间连续,堆算法效率更高),也可指定。:测试自定义优先级队列。: 仿函数的应用拓展。

2025-12-07 16:29:18 736

原创 C++:基于容器适配器模式的 Stack 与 Queue 实现(复用底层容器的优雅设计)

即双端队列,是 STL 中一种双开口的 “连续” 空间数据结构。的核心是 “仅允许栈顶操作”,我们通过模板参数指定底层容器(默认使用 deque,兼顾效率与灵活性),封装其尾操作接口。) 组成 —— 中控器存储着各个缓冲区的地址,通过迭代器的特殊设计,将分段的缓冲区 “拼接” 成逻辑上的连续空间。这种设计的优势在于:无需重复实现内存管理逻辑,直接复用底层容器的成熟功能,同时保持接口的简洁性。:表面上支持随机访问,给人 “连续空间” 的使用体验,但实际底层由一段段小的连续缓冲区(当迭代器从一个缓冲区的末尾(

2025-12-07 15:49:09 998

原创 C++ :Stack 与 Queue 完全使用指南(基础操作 + 经典场景 + 实战习题)

include <stack> // 必须包含头文件// 定义栈:默认存储int类型,底层依赖deque实现// 可指定底层容器(如vector、list)// 基于vector的栈// 基于list的栈#include <queue> // 必须包含的头文件// 定义队列:默认底层依赖deque实现// 可指定底层容器(如list,不建议用vector,因vector头删效率低)// 基于list的队列。

2025-12-07 12:51:47 930

原创 C++ :手写 List 容器实战(从双向链表原理到完整功能落地,附源码与测试验证)

容器类整合节点与迭代器,提供构造,插入,删除,遍历等核心接口,底层通过调整指针实现高效的操作(参考 string 的"接口复用"思想,如。结论:拷贝构造实现深拷贝(修改 lt1 不影响 lt2),const 迭代器仅支持只读访问,符合设计预期。的类,通过运算符重载模拟指针行为,同时用 “三模板参数” 复用普通 /const 迭代器。节点是存储数据的载体,用模板类实现泛型支持,适配任意数据类型(如。代码,覆盖构造、遍历、插入、删除等核心场景,验证容器功能。头插,头删,尾删功能正常,能正确清空数据节点,

2025-12-01 10:54:07 1020

原创 C++ :STL list 完全指南(从基础操作到特性对比,解锁链表容器高效用法)

这种结构决定了 list 的核心特性:任意位置插入/删除效率高(O(1)),但不支持随机访问(访问元素需要遍历,O(N))。的接口丰富,但重点掌握"构造,迭代器,容量,元素访问,修改’五大类即可满足日常开发需求,以下结合代码示例讲解。的迭代器本质是 “结点指针的封装”,支持正向和反向遍历,核心接口如下(当然也可以使用范围for)前面说过,此处大家可将迭代器暂时理解成类似于指针,非空时使用,若为空会触发未定义行为(建议先。时的核心注意点,但其失效规则比。不支持随机访问(没有。

2025-11-30 23:55:20 913

原创 补充:const

【代码】补充:const。

2025-11-25 19:39:56 198

原创 C++:vector(从三指针模型到手写完整实现)

public:--我们这里迭代器的使用可以测试一下,实现的打印函数我就直接放上去了,之前讲过test.c:i++)//v[0]++;v[0]++;Print(v);若 vector 存储的是含指针的自定义类型(如 string),直接用 memcpy 拷贝会导致多个对象共享内存,析构时双重释放。本文实现的 reserve 和拷贝构造均用移动 / 拷贝构造函数迁移元素,避免了这一问题。

2025-11-25 19:36:25 982

原创 C++98:string 核心机制拆解 —— 从拷贝策略到高效 swap

拷贝机制的选择深拷贝:安全但低效,适合写操作频繁的场景;写时拷贝:读多写少场景下的优化,但存在线程安全与迭代器失效问题,现代编译器已逐渐弃用。swap 实现的最优实践优先使用成员swap:直接交换资源,效率最高;全局swap优化:标准库已帮我们优化,无需手动实现,但需知道其底层依赖成员swap的本质。

2025-11-24 23:05:50 615

原创 C++: string 底层原理拆解,面试

-这里将迭代器 typedef 为 char*,begin 函数返回指向字符串起始位置的指针,end 函数返回指向字符串有效字符结尾的下一个位置('\0'所在的位置)的指针,这样就可以利用指针的算术运算和解引用操作来实现迭代器的功能。--这里需要注意,拷贝构造和赋值运算符重载都采用了深拷贝的方式,即新对象会分配独立的内存空间来存储字符串内容,而不是简单的直接复制指针,这样可以避免多个对象共享同一块内存导致的"重复释放"等问题。",支持追加单个字符或者字符串,底层直接复用已有函数逻辑,简化代码的书写。

2025-11-18 21:50:14 763

原创 C++:string 类使用

那我们如果想要进行缩容,就可以使用 shrink_to_fit() (但是这个只是一个建议,而且我们使用的也少,代价太大了)--除了前面讲的一些以外,其实我们的string还有很多比较实用的接口,这里就再给大家分享一部分,如果有没分享到但是大家需要使用的话可以自己查阅参考文档去了解一下用法。如果我们知道字符串最后大概有多长(比如上面的拼接200个字符),就可以先用 reserve() 预分配空间,避免扩容次数过多。--在日常使用中,遍历是高频的操作,这里博主比较推荐大家使用前两种,更加简单直观。

2025-11-09 21:55:44 750

空空如也

空空如也

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

TA关注的人

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