![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 78
阿阿阿顺Yaya
热爱可抵道路漫长。
展开
-
【C++】多线程相关
多线程的问题,在C++11之前,都是和平台相关联的。比如Windows和Linux平台各有自己的一套多线程的接口,这就使得多线程编程相关的代码的可移植性比较差。而从C++11开始,引入了线程相关的库,使得C++多线程编程时不再需要接入第三方的库。原创 2023-12-14 16:31:52 · 867 阅读 · 0 评论 -
【C++】类型转换 | IO流 | 空间配置器
C语言总共有两种形式的类型转换:隐式类型转换 和 显示类型转换。C++之所以还要提出自己的类型转换,主要是为了更好地规避C语言风格类型转换所带来的的缺陷和风险。原创 2023-11-11 19:26:54 · 150 阅读 · 0 评论 -
【C++】单例模式
如果一个程序中有多个单例,且有先后创建要求时,饿汉模式无法控制;而且饿汉模式初始化时任务很多,会影响程序启动速度。当一个类只能创建一个对象,即所谓单例模式。即懒汉模式可以控制单例的先后创建顺序,因为使用时才创建实例,所以不影响程序的启动速度;饿汉模式就是一开始(main函数之前)就把对象创建出来。单例模式主要有两种实现模式:饿汉模式 和 懒汉模式。懒汉模式是指第一次使用对象时才进行对象的创建。但懒汉模式的设计相对复杂,且存在线程安全问题。懒汉模式的优缺点相对饿汉模式来说就是相反的,原创 2023-11-10 23:16:15 · 524 阅读 · 0 评论 -
【C++】异常 & 智能指针
C++异常是一种处理错误的方式。当一个函数遇到自己无法处理的错误时就可以抛出异常,让该函数的直接或间接调用者通过捕获这个异常来处理错误。一些异常关键字的介绍:1.1.异常的抛出与捕获异常是以对象形式抛出的,当在里时,异常抛出,会首先查找匹配的。而且该对象的类型决定了由哪个进行捕获处理。而被选中的处理程序是与对象类型匹配且离异常抛出位置最近的一个。如果没有匹配的则会跳出当前函数栈,在调用该函数的栈中查找匹配的。如果直到函数栈帧都没有匹配的,程序则会终止。异常对象可能是一个临时对象,在被抛出时出作用域原创 2023-11-10 21:44:38 · 308 阅读 · 0 评论 -
【C++】C++11常用特性梳理
C++11是继C++98之后,第二个真正意义上的标准。C++11增加的语法特性非常多,这里主要介绍实际比较实用的语法。原创 2023-11-11 19:26:24 · 249 阅读 · 0 评论 -
【C++】哈希思想的两种应用实例
所谓位图,就是用一个bit位来标识数据的状态,通常是用于判断某个数据存不存在。如果有40亿个不重复的无符号整数,没排过序。再给你一个无符号整数,如何快速判断这个数是否存在于这40亿个数中呢?位图一般就能很好地处理这种海量数据,且无重复的情景。还有一些问题如下:给定100亿个整数,如何找到只出现一次的整数?给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集?这些问题可以考虑使用两个位图来解决。位图除了可以快速查找某个数据是否在一个集合中,还可以用于排序+去重;原创 2023-10-20 15:30:00 · 86 阅读 · 0 评论 -
【C++】unordered_set & unordered_set 的底层封装
一个K类型去做unordered_set/unordered_map的模板参数,一是要求K类型对象。用以取模,或者提供转换成整形的仿函数;二是要求K类型对象可以。一个K类型去做set/map的模板参数,要求K类型对象。,或者显示提供比较的仿函数。,或者提供比较的仿函数。原创 2023-10-18 15:30:00 · 122 阅读 · 0 评论 -
【C++】哈希学习
unordered系列关联式容器是从C++11开始,STL提供的。它的查询效率要更优于set/map类型关联式容器。unordered系列容器的名字是从功能角度来取定的。set/map这类容器,其遍历是有序的,而unordered系列容器的遍历则是无序的。从底层角度来看,set/map类容器底层采用红黑树实现,而unordered系列容器则是采用的哈希结构。同时,map/set的迭代器是双向的,而unordered系列容器是单向的。unordered系列容器的使用可以参考set/map的使用。原创 2023-10-16 16:20:21 · 168 阅读 · 0 评论 -
【C++】set & map 的底层封装
在了解底层封装之前除了对set和map的使用情况要有一定了解,还需要先学习一下二叉搜索树,AVL树,红黑树这些数据结构。原创 2023-10-08 16:00:00 · 124 阅读 · 0 评论 -
【C++】AVL树 & 红黑树
AVL树也是二叉搜索树的一种。因为对于普通的二叉搜索树,当插入的数据在有序或接近有序的情况下,二叉搜索树很可能退化成单支树,导致查找效率低下。而AVL树就很好的解决了这个问题。首先,AVL树是一棵二叉搜索树。同时对于AVL树中每个节点,它的左右子树高度之差的绝对值不超过1。对于有n个节点的AVL树,其搜索时间复杂度可以稳定的保持在Olog2n。为了保证向AVL树中插入节点,仍保持其高度的平衡,可以引入平衡因子(平衡因子:右子树的高度 - 左子树的高度)来处理。原创 2023-10-05 13:09:35 · 154 阅读 · 0 评论 -
【C++】set & map的使用
关联式容器也是用于存储数据的,其与序列式容器不同,内部存储的是``键值对结构的数据,且在数据检索方面比序列式容器效率要更高。原创 2023-10-07 16:00:00 · 151 阅读 · 0 评论 -
【C++】二叉搜索树
二叉搜索树(BST,Binary Search Tree),也称二叉排序树或者二叉查找树。原创 2023-09-12 02:30:00 · 318 阅读 · 0 评论 -
【C++】多态学习
多态就是多种形态,简单理解就是不同的对象去执行某个行为时会产生出不同的状态表现。多态表现在继承关系中,继承关系的类对象去调用同一函数,会产生不同的状态行为表现。例如,在买票体系中,普通人(Person)买票是全价,学生(Student)买票是半价。两个基类和派生类的同名函数不构成重写,就是构成重定义。原创 2023-08-31 20:00:00 · 354 阅读 · 0 评论 -
【C++】模板学习(二)
模板体现了复用和泛型编程,标准模板库(STL)的实现离不开模板。同时,模板也可能导致代码膨胀问题,导致编译时间变长。模板的报错也会导致错误信息凌乱,不易定位错误。原创 2023-08-02 12:31:40 · 157 阅读 · 0 评论 -
【C++】stack | queue | priority_queue的模拟实现
deque(双端队列) 是一种双开口的“连续”空间的数据结构。双开口是指,可以在头尾两端进行插入删除,且时间复杂度都是O(1)。但deque并不是真的连续的物理空间,而是由一段又一段连续的小空间拼接而成的。为什么会选择 deque 作为 stack 和 queue 的默认底层容器呢?与 vector 相比,deque 头部插入删除效率高,扩容也不需要搬移大量的元素。与 list 相比,空间利用率更高,不需要存储额外字段。原创 2023-07-31 20:03:59 · 154 阅读 · 0 评论 -
【C++】list的模拟实现
【代码】【C++】list的模拟实现。原创 2023-07-29 12:02:52 · 758 阅读 · 0 评论 -
【C++】vector的模拟实现
【代码】【C++】vector的模拟实现。原创 2023-07-22 20:11:23 · 67 阅读 · 0 评论 -
【C++】string类的模拟实现
【代码】【C++】string类的模拟实现。原创 2023-07-17 22:17:19 · 231 阅读 · 1 评论 -
【C++】日期计算器编写(计算范围为1900之后的日期)
Date.h日期类声明#pragma once#include <iostream>#include <math.h>using namespace std;extern const int days[13]; // 存储12个月份的天数extern const char* const week[7]; // 存储星期/** 日期类*/class Date{ /* * 友元 * 日期输入输出 */ friend ostream& opera原创 2023-07-02 22:37:14 · 214 阅读 · 0 评论 -
【C++】继承学习
继承是面向对象程序设计中代码复用最重要的手段。它允许在保持原有基类(父类)的基础上进行类的扩展,产生派生类(子类)。这体现了面向对象程序设计的层次结构。在继承之前所接触的复用大多都是函数复用,继承却是类设计层次的复用。原创 2023-04-30 10:56:04 · 639 阅读 · 5 评论 -
【C++】string类的简单模拟实现
主要实现的还是string类的构造,拷贝构造,赋值运算符重载以及析构函数等。让每个对象都有一份独立的资源,不要和其它对象共享,这就是深拷贝要达到的效果。如果一个类中涉及到资源的管理,其拷贝构造函数、赋值运算符重载以及析构函数一般都要按照深拷贝的方式显式给出。而在C++中,为了更好地规避这些问题,就出现了string类来对字符串进行更好的封装使用,使得字符串的操作更简单,方便,快捷。由于C语言中的字符串不太符合OOP(面向对象编程)的思想,而且其底层空间需要用户自己管理,经常有访问越界的情况出现。原创 2023-04-22 16:57:28 · 452 阅读 · 17 评论 -
【C++】模板学习(一)
在实际编程中,经常会用到交换函数。比如有整型值的交换,浮点型值的交换,字符型值的交换…但是,难道对于每一种类型不同的值的交换,我们都要重新写一个对应的交换函数吗?这样的话,代码的复用率和可维护性都会降低。可以发现,上面的交换代码,仅仅是类型上有所区别,但在交换的逻辑上都是一致的。所以我们能否给编译器声明一个模具,让编译器根据这个模具来对不同类型的数据进行相同逻辑的操作呢。这就是要提的泛型编程了。在C++中模板又是泛型编程的基础。而模板又分为和,下面来依次介绍。原创 2023-04-22 12:56:50 · 389 阅读 · 6 评论 -
【C++】内存管理
/ 1.堆上申请空间 2.调用构造函数初始化 A * p = new A(10);// 1.调用析构函数清理对象中的资源 2.释放空间 delete p;return 0;new和delete其实就是为自定义类型准备的。不仅会在堆上申请释放空间,还会初始化和清理空间。new的原理调用函数申请对象的空间。在申请的空间上执行构造函数,完成对象的构造。delete的原理在空间上执行析构函数,完成对象的清理工作。原创 2023-04-18 11:54:07 · 445 阅读 · 11 评论 -
【C++】类和对象
类的引入/类的定义/类的访问限定符及封装/类的实例化/类对象模型/this指针/类的6个默认成员函数/构造函数/析构函数/拷贝构造函数/运算符重载/const成员/取地址及const取地址操作符重载/初始化列表/explicit关键字/static成员/友元/内部类原创 2023-04-16 19:49:48 · 308 阅读 · 17 评论 -
【C++】基础篇
什么是C++\命名空间\C++的输入和输出\缺省参数\函数重载\引用\auto关键字\基于范围\for循环\指针空值nullptr原创 2023-04-09 12:54:32 · 426 阅读 · 15 评论 -
【C++】内联函数理解
内联函数的使用是对于C语言中宏函数的一种改进,他继承了宏的优点并避免了宏的缺点。宏的优点:a. 代码复用性高 b. 宏函数减少栈帧建立,提高效率宏的缺点:a. 可读性差 b. 没有类型安全检查 c. 不方便调试C++基本不再建议使用宏,而是建议尽量使用constenumInline去替代宏。以inline修饰的函数就叫做内联函数。inline在符合条件的情况下,编译时C++编译器会在调用内联函数的地方进行展开,此时就没有建立栈帧的开销,提高了程序运行的效率。原创 2023-04-09 10:57:47 · 473 阅读 · 5 评论 -
C/C++之静态库调用
C程序调用C++库/C++程序调用C库原创 2023-04-08 21:32:33 · 278 阅读 · 2 评论