C++学习之路
文章平均质量分 97
分享C++&&STL等学习经验
一位虔诚的软微信徒
一个励志想考上北大软微的朝圣者,圣软微的虔诚信徒!我想说:软憨无罪!!!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ 智能指针的使⽤及其原理(包含模拟实现)
函数用途operator=共享所有权swap()交换指针reset()释放资源get()获取裸指针operator*->访问对象查看引用数unique()是否唯一判空所有权排序unique_ptr函数用途operator=转移所有权(仅支持移动赋值,拷贝被禁用)swap()交换两个unique_ptr的内部指针(高效,不涉及资源复制)reset()释放当前管理的对象,并可接管新对象(安全重置)get()获取原始裸指针(用于兼容 C 接口,不可 delete)operator*->原创 2026-01-31 00:15:47 · 864 阅读 · 3 评论 -
C++ 异常详解
include <stdexcept> // 包含 std::runtime_error// 推荐:继承标准异常子类(而不是直接继承 exception)public:: std::runtime_error(msg) {} // 调用基类构造// 使用int main()tryconnect();// 输出自定义消息💡为什么不直接继承?因为的what()默认只返回空字符串,你需要自己管理错误信息。而已经实现了带字符串的构造和what(),更方便,当然你要自己实现what。原创 2026-01-28 21:21:35 · 767 阅读 · 4 评论 -
C++ 11 新增特性(下)
欢迎来到我的频道码云链接。原创 2026-01-26 21:54:35 · 675 阅读 · 2 评论 -
C++11 新增特性(中)
欢迎来到我的频道码云链接。原创 2026-01-25 22:00:03 · 778 阅读 · 4 评论 -
C++11 新增特性(上)
欢迎来到我的频道码云链接。原创 2026-01-23 18:16:34 · 664 阅读 · 3 评论 -
⽤哈希表封装unordered_map和unordered_set(C++模拟实现)
在阅读本章节前 请保证掌握以下知识 哈希表的实现&&unorderedmap和unorderedset的使用 同时确保自己熟练掌握map和set的封装(因为里面除了底层一个是红黑树一个是哈希表外 基本区别不大 所以很多冲突部分都不会详细解释 也不会一步一步推导的写 而是围绕成品代码解释为什么这么写)哈希表(C++详解版&&线性探测法、哈希桶的实现)C++ unordered_map和unordered_set的使用C++ set&&map的模拟实现。原创 2026-01-22 18:14:22 · 622 阅读 · 5 评论 -
C++ set&&map的模拟实现
学习本章节 必须掌握 红黑树的实现和 set&&map 的基本使用详情可以参考小编写的【set的使用】【map的使用】【红黑树】原创 2026-01-08 17:39:13 · 1074 阅读 · 0 评论 -
C++ unordered_map和unordered_set的使用
的声明如下,Key就是底层关键字的类型默认要求Key支持转换为整形,如果不支持或者想按自己的需求走可以自行实现支持将Key转成整形的仿函数传给第二个模板参数默认要求Key支持比较相等,如果不支持或者想按自己的需求走可以自行实现支持将Key比较相等的仿函数传给第三个模板参数底层存储数据的内存是从空间配置器申请的,如果需要可以自己实现内存池,传给第四个参数。一般情况下,我们都不需要传后三个模板参数底层是用哈希桶实现,增删查平均效率是O1O(1)O1,迭代器遍历不再有序,为了跟set。原创 2026-01-07 15:25:59 · 743 阅读 · 0 评论 -
C++ map和multimap的使用
map的声明如下,Key就是map底层关键字的类型,T是map底层value的类型,set默认要求Key支持小于比较,如果不支持或者需要的话可以自行实现仿函数传给第二个模版参数,map底层存储数据的内存是从空间配置器申请的。一般情况下,我们都不需要传后两个模版参数。map底层是用红黑树实现,增删查改效率是OlogNO(logN)OlogN,迭代器遍历是走的中序,所以是按key有序顺序遍历的。map底层的红黑树节点中的数据,使用存储键值对数据。std::pair是 C++ 标准库。原创 2025-12-28 16:28:32 · 919 阅读 · 0 评论 -
C++ 多态详解
多态是一个继承关系下的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象优惠买票。原创 2025-12-04 23:35:56 · 874 阅读 · 3 评论 -
C++ 继承详解
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许我们在保持原有类特性的基础上进行扩展,增加方法(成员函数)和属性(成员变量),这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的复用,继承是类设计层次的复用。下面我们看到没有继承之前我们设计了两个类Student和TeacherStudent和Teacher都有姓名/地址/电话/年龄等成员变量,都有identity。原创 2025-12-03 00:03:50 · 1096 阅读 · 2 评论 -
C++ 模版(进阶)(含array解析)
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。比如说一个函数 他只有.h文件的声明 没有.cpp的实现 那么他就会有链接错误 下图是文件编译的全过程:在汇编语言中 其实调用函数的本质 就是call + 函数地址,而函数其实跟数组很像,我们在test.cpp中对于函数的申明其实我们是没有它的地址的。而函数的地址是在定义中不是声明中。在有些编译器中test.cpp文件中汇编语言会形成call (?的声明。原创 2025-12-01 20:50:27 · 659 阅读 · 3 评论 -
C++ stack和queue的使用和模拟(含deque容器的底层解析)
适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设 计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。在 C++ STL 中,容器适配器是一种特殊的容器,它不直接管理数据,而是通过“包装”一个已有的基础容器(如std::liststd::deque),并提供一个受限的、特定的接口来适配其行为。复用现有容器的功能,通过限制其接口来满足特定的数据结构需求。简化接口:提供了更简单、更专注的接口,使代码更清晰、更易于理解和维护。例如,使用。原创 2025-11-26 21:47:45 · 1031 阅读 · 5 评论 -
C++ string类(超详细讲解+2w字大章含string的模拟实现)
在使用string类时,必须包含#include头文件以及using namespace std解释(1) 空字符串构造函数(默认构造函数)构造一个空字符串,长度为零个字符。(2) 拷贝构造函数构造str的一个副本。(3) 子字符串构造函数复制str中从字符位置pos开始、长度为len的字符部分(如果str太短或len为string::npos,则复制到str末尾)。(4) 从C字符串构造复制由s指向的以空字符结尾的字符序列(C字符串)。(5) 从缓冲区构造从s指向的字符数组中复制前n个字符。原创 2025-09-10 19:50:42 · 598 阅读 · 5 评论 -
C++ priority_queue的使用和模拟实现(含仿函数和函数对象的解析)
C++查询文档请转跳优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素 中最大的。此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶 部的元素)。优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue 提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的 顶部。原创 2025-11-29 20:24:16 · 770 阅读 · 4 评论 -
C++ 模板(初阶)
模版本质:将我们本来需要做的事情 交给编译器 让我们更加轻松 但实际生成的东西没有少 本质是帮你生成多个函数或者多个类。求三连!!原创 2025-09-04 20:22:30 · 774 阅读 · 3 评论 -
C++ list容器的解析和使用(包含模拟实现)
list本质是一个双向链表 而链表的详细解析请移步我的另一篇文章单链表的实现。原创 2025-10-28 15:03:35 · 1133 阅读 · 3 评论 -
C++ vector容器的解析和使用
v2.end())这么写是错误的 因为没有重载流插入//这么写也可以++it2;cout<<endl;//当然肯定是范围for更香一点 c++11//c++17 新出的语法糖 当容器是结构的时候就可以这么用//取aa1的成员依次进行赋值for(auto[x,y] :v2)//结构化绑定for(auto&[x,y] :v2)//不想有拷贝构造函数。原创 2025-10-18 20:42:49 · 1230 阅读 · 4 评论 -
C/C++内存管理
函数参数形式初始化主要用途malloc字节数(如100不初始化快速分配未初始化的内存calloc元素个数 + 每个元素大小初始化为 0分配需要清零的数组/结构体等realloc原指针 + 新总字节数新增部分不初始化调整已分配内存的大小//new/delete 和 malloc/free最大区别是 new/delete 对于自定义类型除了会开空间还会调用构造函数//调用构造函数delete p1;//调用析构函数//调用构造函数//调用析构函数深层次应用//拷贝构造。原创 2025-09-02 21:22:16 · 1025 阅读 · 0 评论 -
C++ set和multiset的使用
本文介绍了C++中序列式容器和关联式容器的区别,重点讲解了关联式容器set的使用方法。序列式容器存储线性序列数据,而关联式容器(如set/map)基于非线性结构,通过关键字访问数据。set底层采用红黑树实现,具有自动排序和去重功能,其元素不可修改。文章详细说明了set的构造方法、迭代器使用、插入删除操作(insert/erase/emplace等),以及高效的find查找功能(O(logN)复杂度)。通过代码示例展示了set的基本操作和特性,强调了其与算法库函数的性能差异。原创 2025-12-13 14:21:30 · 825 阅读 · 2 评论 -
C++ 类和对象(下)
必须放在初始化列表位置进行初始化,否则会编译报错。原创 2025-08-31 16:54:57 · 1055 阅读 · 3 评论 -
C++ 类和对象(中)
显式初始化新对象;函数传参(值传递);函数返回对象(值返回)。若未显式定义拷贝构造函数,编译器会生成默认拷贝构造函数(浅拷贝),但涉及动态内存管理时需手动实现(深拷贝),避免内存问题。原创 2025-08-28 09:19:26 · 1020 阅读 · 4 评论 -
C++ 入门基础篇(结合汇编和代码编译连接底层的深度解析版)
1.定义命名空间,需要使用到 namespace 关键字,后面跟命名空间的名字,然后接一对 {} 即可,{} 中即为命名空间的成员。命名空间中可以定义变量 / 函数 / 类型等。2.namespace 本质是定义出一个域,这个域跟全局域各自独立,不同的域可以定义同名变量,所以上面的 rand 不在冲突了。。3.C++ 中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找一个变量 / 函数 / 类型出处 (声明或定义) 的逻辑,所有有了域隔离,名字冲突就解决了。原创 2025-08-22 14:13:22 · 1057 阅读 · 2 评论 -
C++ 类和对象 (上)
C++类与对象基础概念解析 摘要:本文介绍了C++中类与对象的基本概念。类通过class关键字定义,包含成员变量和函数,使用访问限定符(public/protected/private)控制访问权限。类定义形成一个独立的作用域,成员函数在类外定义需使用作用域操作符::。类只是抽象模板,通过实例化创建实际占用内存的对象。对象大小仅包含成员变量,采用内存对齐规则计算,不包含成员函数指针。空类对象占1字节以区分不同实例。结构体struct在C++中也可定义类,默认访问权限为public,而class默认为priv原创 2025-08-23 14:42:00 · 1077 阅读 · 5 评论
分享