c++入门到精通
文章平均质量分 97
以各种代码实践为基础进行深度学习
RO-BERRY
来日顶峰相见
展开
-
【C++庖丁解牛】异常
实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了服务器开发中通常使用的异常继承体系class Exception //基类public:, _id(id){}virtual string what() const //获取错误描述protected://错误描述int _id;//错误编号。原创 2024-05-17 21:12:23 · 969 阅读 · 5 评论 -
【C++庖丁解牛】C++11---lambda表达式 | 包装器
🍁你好,我是📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识。原创 2024-05-02 10:03:50 · 679 阅读 · 21 评论 -
【C++庖丁解牛】C++11---新的类的功能 | 可变参数模板
🍁你好,我是📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识。原创 2024-04-30 15:10:51 · 1134 阅读 · 34 评论 -
【C++庖丁解牛】C++11---右值引用和移动语义
C++11正是通过引入右值引用来优化性能,具体来说是通过移动语义来避免无谓拷贝的问题,通过move语义来将临时生成的左值中的资源无代价的转移到另外一个对象中去,通过完美转发来解决不能按照参数实际类型来转发的问题(同时,完美转发获得的一个好处是可以实现移动语义)。在C++11中所有的值必属于左值、右值两者之一,右值又可以细分为纯右值、将亡值。在C++11中可以取地址的有名字的就是左值,反之,不能取地址的、没有名字的就是右值(将亡值或纯右值)。举个例子,原创 2024-04-23 15:29:37 · 1755 阅读 · 65 评论 -
【C++庖丁解牛】C++11---统一的列表初始化 | auto | decltype | nullptr | STL中一些变化
🍁在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。🍁不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。🎄从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。原创 2024-04-18 16:31:05 · 1379 阅读 · 47 评论 -
【C++庖丁解牛】哈希表/散列表的设计原理 | 哈希函数
unordered系列的关联式容器之所以效率比较高,是因为其底层使用了哈希结构。原创 2024-04-14 21:03:58 · 1338 阅读 · 40 评论 -
【C++庖丁解牛】底层为红黑树结构的关联式容器--哈希容器(unordered_map和unordered_set)
unordered_map是存储<key, value>键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。在unordered_map中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。在内部,unordered_map没有对<kye, value>按照任何特定的顺序排序, 为了能在常数范围内找到key所对应的value,unordered_map将相同哈希值的键值对放在相同的桶中。原创 2024-04-14 11:25:28 · 1169 阅读 · 12 评论 -
【C++庖丁解牛】高阶数据结构---红黑树详解(万字超详细全面介绍红黑树)
这篇文章我们再来学习一种平衡搜索二叉树——红黑树如果要说常见的数据结构里,哪个数据结构最麻烦、最难以掌握?绝对非红黑树莫属了,如果只是自己看的话很多人可能看很多遍都不太懂红黑树。红黑树和AVL树都是常见的自平衡二叉搜索树,它们都可以用于高效地支持插入、删除和查找等操作。虽然它们都能够保持树的平衡性,但在不同的应用场景下,红黑树和AVL树有各自的优势和适用性。// 节点的颜色// 红黑树节点的定义{}// 节点的左孩子// 节点的右孩子。原创 2024-04-02 19:43:58 · 2114 阅读 · 174 评论 -
【C++庖丁解牛】基于红黑树实现的两种常用的关联容器map和set以及multimap
🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油目录1. 关联式容器2. 键值对3. 树形结构的关联式容器4. set的介绍5. set的使用5.1 set的模板参数列表5.2 set的构造5.3 set的迭代器5.4 set的容量5.5 set修改操作5.6 set的使用举例构造及其遍历find and erasecountlower_boundupper_原创 2024-03-30 21:56:54 · 1465 阅读 · 37 评论 -
【C++庖丁解牛】二叉搜索树(Binary Search Tree,BST)
🍁你好,我是📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识。原创 2024-03-23 18:21:02 · 2152 阅读 · 182 评论 -
【C++庖丁解牛】面向对象的三大特性之一多态 | 抽象类 | 多态的原理 | 单继承和多继承关系中的虚函数表
需要声明的,本节课件中的代码及解释都是在vs2013下的x86程序中,涉及的指针都是4bytes。如果要其他平台下,部分代码需要改动。比如:如果是x64程序,则需要考虑指针是8bytes问题等等多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。原创 2024-03-21 17:25:22 · 977 阅读 · 27 评论 -
【C++庖丁解牛】继承的概念及定义 | 继承中的作用域 | 继承与友元继承与静态成员 | 复杂的菱形继承及菱形虚拟继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用继承后父类的Person的成员(成员函数+成员变量)都会变成子类的一部分。这里体现出了Student和Teacher复用了Person的成员。下面我们使用监视窗口查看Student和Teacher对象,可以看到变量的复用。原创 2024-03-19 16:41:41 · 1915 阅读 · 25 评论 -
【C++庖丁解牛】stack的介绍和使用 | queue的介绍和使用 | priority_queue的介绍和使用
stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:empty:判空操作back:获取尾部元素操作push_back:尾部插入元素操作pop_back。原创 2024-03-18 16:08:49 · 2062 阅读 · 135 评论 -
【C++庖丁解牛】vector容器的简易模拟实现(C++实现)(最后附源码)
我们前面介绍了vector容器的概念以及对其基本使用进行了介绍,如果你在这里不知道vector是什么以及不知道如何使用的话,可以进入本人主页,在C++专栏里有介绍为了对小白友好,在这我简单介绍一下C++中的vector是一个动态数组容器,可以存储不同类型的元素。它提供了一系列的成员函数来方便地操作和管理数组。动态大小:vector的大小可以根据需要动态调整,可以在运行时添加或删除元素。随机访问:可以通过索引直接访问vector中的元素,支持常数时间的随机访问。原创 2024-03-13 08:13:28 · 1549 阅读 · 114 评论 -
【C++庖丁解牛】实现string容器的增删查改 | string容器的基本接口使用
函数名称功能说明push_back在字符串后尾插字符cappend在字符串后追加一个字符串operator+= (重点)在字符串后追加字符串strc_str(重点)返回C格式字符串findnpos(重点)从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置rfind从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置substr在str中从pos位置开始,截取n个字符,然后将其返回。原创 2024-03-10 09:00:00 · 1086 阅读 · 58 评论 -
【C++庖丁解牛】STL之vector容器的介绍及使用 | vector迭代器的使用 | vector空间增长问题
vector的文档介绍vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。原创 2024-03-11 18:42:47 · 1221 阅读 · 110 评论 -
【C++庖丁解牛】模拟实现STL的string容器(最后附源码)
就像一个家庭中有两个孩子,但父母只买了一份玩具,两个孩子愿意一块玩,则万事大吉,万一不想分享就你争我夺,玩具损坏。可以采用深拷贝解决浅拷贝问题,即:每个对象都有一份独立的资源,不要和其他对象共享。父母给每个孩子都买一份玩具,各自玩各自的就不会有问题了。原创 2024-03-11 18:42:39 · 936 阅读 · 31 评论 -
【C++庖丁解牛】STL简介 | string容器初次见面
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。原创 2024-03-09 10:18:15 · 1142 阅读 · 30 评论 -
【C++庖丁解牛】初始化列表 | Static对象 | 友元函数
内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。原创 2024-03-05 16:06:56 · 1320 阅读 · 18 评论 -
【C++庖丁解牛】默认成员函数
如果一个类中什么成员都没有,简称为空类。空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。构造函数、析构函数、拷贝构造函数、赋值运算符重载、普通对象取地址重载、const修饰对象的取地址重载。所有的默认成员函数都是可以由编译器自己生成的,编译器会自己生成一个默认的函数。同时我们也可以自己定义这些函数,那么编译器就会直接使用我们定义好的函数而不会自己再生成了。原创 2024-03-04 16:32:55 · 1214 阅读 · 118 评论 -
【C++庖丁解牛】C++内存管理 | new和delete的使用以及使用原理
int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数cout原创 2024-03-07 09:00:00 · 1547 阅读 · 111 评论 -
【C++庖丁解牛】模版初阶
class 类模板名// 类内成员定义public:, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表。原创 2024-03-07 09:00:00 · 1266 阅读 · 42 评论 -
【C++庖丁解牛】类与对象
/ 类体:由成员函数和成员变量组成 };// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。2. 类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名::一般情况下,更期望采用第二种方式。原创 2024-03-02 20:15:40 · 1330 阅读 · 33 评论 -
【C++函数探幽】内联函数inline
内联函数是C++为提高程序运行速度所做的一项改进。常规函数和内联函数之间的主要区别不在于编写方式,而在于C++编译器如何将他们组合到程序中。要了解内联函数与常规函数之间的区别, 必须深入到程序内部。编译过程的最终产品是可执行程序——由一组机器语言指令组成。运行程序时,操作系统将这些指令载入到计算机内存中,因此每条指令都有特定的内存地址。计算机随后将逐步执行这些指令。有时(如有循环或分支语句时),将跳过一些指令,向前或向后跳到特定地址。常规函数调用也使程序跳到另一个地址(函数的地址),并在函数结束时返回。原创 2024-02-15 09:00:00 · 1231 阅读 · 69 评论 -
【C++庖丁解牛】引用(取别名)
📗 学习方向:致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识。原创 2023-10-31 16:52:06 · 534 阅读 · 1 评论 -
【C++】缺省参数及函数重载
📗 学习方向:致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识。原创 2023-10-29 15:22:25 · 118 阅读 · 0 评论 -
【C++关键字】auto以及指针空值nullpr
C++11新增了一个工具,让编译器能够根据初始值的类型推断变量的类型。为此,他重新定义了auto的含义。auto是一个C语言关键字,但很少使用。在初始化声明中,如果使用关键字auto,而不指定变量的类型,编译器将把变量的类型设置成与初始值相同//X is int然而,自动推断类型并非为这种简单情况而设计的;事实上,如果将其用于这种简单情形,甚至可能会让您误入歧途。auto x = 0.0 //x为double类型,因为0.0是doubledouble y = 0 //0被强制转换为double类型。原创 2024-02-19 17:49:46 · 1085 阅读 · 14 评论 -
C++入门(c++历史篇)
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。原创 2023-10-19 18:07:14 · 288 阅读 · 0 评论 -
C++第一篇--关键字以及命名空间
C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的,比如:作用域方面、IO方面、函数方面、指针方面、宏方面等。为后续类和对象学习打基础。原创 2023-10-24 20:17:47 · 126 阅读 · 0 评论