C++
文章平均质量分 91
学习!
MuqiuWhite
努力学习中……
展开
-
C++笔记—— 第十七篇 智能指针 C++11来了(下)
应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死// 1.内存申请了忘记释放// 2.异常安全问题Func();// 这里Func函数抛异常导致 delete[] p3未执行,p3没被释放.原创 2023-05-10 22:51:04 · 551 阅读 · 1 评论 -
C++笔记——第十六篇 异常
3. 如果到达main函数的栈,依旧没有匹配的,则终止程序。C++中异常经常会导致资源泄漏的问题,比如在new和delete中抛出了异常,导致内存泄漏,在lock和unlock之间抛出了异常导致死锁,C++经常使用RAII来解决以上问题。1. 异常对象定义好了,相比错误码的方式可以清晰准确的展示出错误的各种信息,甚至可以包含堆栈调用的信息,这样可以帮助更好的定位程序的bug。异常是一种处理错误的方式,当一个函数发现自己无法处理的错误时就可以抛出异常,让函数的直接或间接的调用者处理这个错误。原创 2023-05-05 23:06:22 · 469 阅读 · 0 评论 -
C++笔记——第十五篇 C++11来了 (上)
C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开发效率。int _y;C++11中最重要的特性就是对线程进行支持了,使得C++在并行编程时不需要依赖第三方库,而且在原子操作中还引入了原子类的概念。要使用标准库中的线程,必须包含< thread >头文件thread() ——构造一个线程对象,没有关联任何线程函数,即没有启动任何线程。原创 2023-05-03 15:49:14 · 605 阅读 · 0 评论 -
C++笔记——第十四篇 哈希
1. unordered_map是存储键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。2. 在unordered_map中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。3. 在内部,unordered_map没有对按照任何特定的顺序排序, 为了能在常数范围内找到key所对应的value,unordered_map将相同哈希值的键值对放在相同的桶中。4. unordered_map容器。原创 2023-04-18 23:42:31 · 347 阅读 · 0 评论 -
C++笔记——第十二篇 二叉搜索树
比如英汉词典就是英文与中文的对应关系,通过英文可以快速找到与其对应的中文,英文单词与其对应的中文就构成一种键值对;再比如统计单词次数,统计成功后,给定单词就可快速找到其出现的次数,单词与其出现次数就是就构成一种键值对。求从根节点到叶子的路径,所以需要前序遍历,这样才方便让父节点指向孩子节点,找到对应的路径;2. KV模型:每一个关键码key,都有与之对应的值Value,即的键值对。原创 2023-04-04 21:05:41 · 542 阅读 · 0 评论 -
C++笔记——第十一篇 多态 深入剖析
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件:1. 必须通过基类的指针或者引用调用虚函数2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。原创 2023-04-03 22:28:30 · 353 阅读 · 0 评论 -
C++笔记——第十篇 继承 的解析,详细易懂哦
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。public:protected:// 姓名// 年龄protected:int _stuid;// 学号protected:int _jobid;// 工号int main()原创 2023-03-28 17:28:13 · 390 阅读 · 0 评论 -
C++笔记——第九篇 C++的IO流 文件操作搞不懂?来这里看看吧!
在C语言中,如果想要将一个整形变量的数据转化为字符串格式:1. 使用itoa()函数2. 使用sprintf()函数但是两个函数在转化时,都得需要先给出保存结果的空间,那空间要给多大呢,就不太好界定,而且转化格式不匹配时,可能还会得到错误的结果甚至程序崩溃。在C++中,可以使用stringstream类对象来避开此问题。在程序中如果想要使用stringstream,必须要包含头文件。原创 2023-03-24 17:27:08 · 538 阅读 · 0 评论 -
C++笔记——第八篇 与模板的深入交流
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。【优点】1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性【缺陷】1. 模板会导致代码膨胀问题,也会导致编译时间变长2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误(图片来源于网络)原创 2023-03-23 16:56:01 · 290 阅读 · 0 评论 -
C++笔记——第七篇 stack和queue
1.stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。3. stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:empty:判空操作back:获取尾部元素操作。原创 2023-03-22 22:09:26 · 229 阅读 · 0 评论 -
C++笔记——第六篇 list的简介和使用
1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。原创 2023-03-21 16:51:37 · 372 阅读 · 0 评论 -
C++笔记——第五篇 vector 它像数组又不像数组
构造函数声明接口说明vector()无参构造构造并初始化n个val拷贝构造使用迭代器进行初始化构造。原创 2023-03-20 16:23:14 · 459 阅读 · 0 评论 -
C++——第四篇 string 深入剖析
一、标准库的string类1. string类2.string类的常用接口说明二、 string类的模拟实现1.浅拷贝2.深拷贝3.写时拷贝。原创 2023-03-17 17:15:01 · 430 阅读 · 0 评论 -
C++笔记——第三篇 模板 是什么板?照着写那种吗?
class 类模板名// 类内成员定义// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public:, _size(0){}// 使用析构函数:在类中声明,在类外定义。~Vector();// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表。原创 2023-03-16 16:40:23 · 336 阅读 · 0 评论 -
C++笔记——第二篇 内存管理是什么?
/ 申请单个Test类型的对象delete p1;// 申请10个Test类型的对象在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与free不会内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不。原创 2023-03-15 15:34:47 · 239 阅读 · 0 评论 -
C++笔记——第一篇 类与对象
age = age;int _age;s.SetStudentInfo("哈哈", "女", 18);return 0;// 类体:由成员函数和成员变量组成//分号类中的元素称为类的成员:类中的数据称为类的属性或者成员变量;类中的函数称为类的方法或者成员函数。1. 声明和定义全部放在类体中,需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理2. 声明放在.h文件中,类的定义放在.cpp文件中(采用第二种方式更好)原创 2023-03-15 12:00:00 · 321 阅读 · 0 评论