c++
文章平均质量分 84
c++
~|Bernard|
这个作者很懒,什么都没留下…
展开
-
C++之命名空间
命名空间又称为名字空间,是程序员命名的内存区域,程序员根据需要指定一些有名字的空间域,把一些全局实体分别存放到各个命名空间中,从而与其他全局实体分隔开。通俗的说,每个名字空间都是一个名字空间域,存放在名字空间域中的全局实体只在本空间域内有效。名字空间对全局实体加以域的限制,从而合理的解决命名冲突。char val2;在声明一个命名空间时,大括号内不仅可以存放变量,还可以存放以下类型:变量,常量,函数(可以是定义或声明),结构体,类,模板,命名空间(可以嵌套定义)struct Foo。原创 2024-02-05 15:35:59 · 839 阅读 · 0 评论 -
C++历史发展概述
C++发明至今已经三十多年了,从最早的简单面向对象逐渐发展成为包含泛型、函数式、模板元等许多范式的复杂混合体,其中的每一个编程范式都可以自成体系,在开发过程中打出一片天地。二十年前,面向过程、基于对象是C++编程的主流范式;十年前,主流范式变成了面向对象+设计模式.而现在C++编程的主流范式则有“返璞归真”的趋势,过度使用虚函数的庞大类继承体系逐渐被摒弃,而使用泛型、函数式等新型范式开发精致的小类并给予良好的组合成为了大方向。原创 2024-02-01 17:13:30 · 677 阅读 · 0 评论 -
C++之异常处理机制
实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承或者多态的规范体系。·C++中异常经常会导致资源泄漏的问题,比如在new和delete中抛出了异常,导致内存泄漏,在lock和unlock之间抛出了异常导致死锁,C++经常使用RAII来解决以上问题。1. 异常对象定义好了,相比错误码的方式可以清晰准确的展示出错误的各种信息,甚至可以包含堆栈调用的信息,这样可以帮助更好的定位程序的bug。原创 2022-10-20 21:38:31 · 200 阅读 · 0 评论 -
C++11之语法篇
随着C++语法的发展,人们开始觉得上面的写法太复杂了,每次为了实现一个algorithm算法, 都要重新去写一个仿函数,如果每次比较的逻辑不一样,还要去实现多个类,特别是相同类的命名,这些都给编程者带来了极大的不便。,不可修改,只读类型的,理论应该按照右值对待,但因为其可以取地址(如果只是const类型常量的定义,编译器不给其开辟空间,如果对该常量取地址时,编译器才为其开辟空间),函数对象,又称为仿函数,即可以像函数一样使用的对象,就是在类中重载了operator()运算符的类对象。原创 2022-10-18 21:18:38 · 1045 阅读 · 0 评论 -
C++之特殊类设计
后来春秋战国时期,七国之间经常打仗,就发现打仗也是有套路的,后来孙子就总结出了《孙子兵法》。如果单例对象构造十分耗时或者占用很多资源,比如加载插件啊, 初始化网络连接啊,读取文件啊等等,而有可能该对象程序运行时不会用到,那么也要在程序一开始就进行初始化,就会导致程序启动时非常的缓慢。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。相对饿汉,复杂一点点。原创 2022-10-12 20:32:39 · 157 阅读 · 0 评论 -
C++之哈希表的应用(位图,布隆过滤器,海量数据处理,哈希切割)
比如:在布隆过滤器中查找"alibaba"时,假设3个哈希函数计算的哈希值为:1、3、7,刚好和其他元素的比特位重叠,此时布隆过滤器告诉该元素存在,但是该元素是不存在的,所以判断元素在库中是不准确的,但是如果布隆过滤器告诉该元素不存在,那么一定不存在,因为相同字符串经过哈希函数过后算出来的整数都是一样的,所以判断元素不在库中是非常准确的.比如:删除上图中"tencent"元素,如果直接将该元素所对应的二进制比特位置0,“baidu”元素也被删除了,因为这两个元素在多个哈希函数计算出的比特位上刚好有重叠。原创 2022-10-11 20:18:17 · 661 阅读 · 0 评论 -
C++之哈希表(开散列和闭散列)
比如删除元素4,如果直接删除掉,44查找起来可能会受影响(因为如果删除4这个位置的值,查找44的时候会根据哈希函数先查找4这个位置,如果4为空了就不会再往后继续查找,所以44就不知道是否存在这个哈希表中,存在误判)。比如2.1中的场景,现在需要插入元素44,先通过哈希函数计算哈希地址,44%10=4,因此44理论上应该插在该4位置,但是该位置已经放了值为4的元素,即发生哈希冲突。对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置取元素比较,若关键码相等,则搜索成功。原创 2022-10-09 20:43:56 · 866 阅读 · 0 评论 -
C++之AVL树和红黑树
因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。因为AVL树也是二叉搜索树,可按照二叉搜索树的方式将节点删除,然后再更新平衡因子,只不过与删除不同的是,删除节点后的平衡因子更新,最差情况下一直要调整到根节点的位置。,更差的是在删除时,有可能一直要让旋转持续到根的位置。原创 2022-09-27 19:10:56 · 754 阅读 · 0 评论 -
C++之map和set
Compare: 比较器的类型,map中的元素是按照key来比较的,缺省情况下按照小于来比较,一般情况下(内置类型元素)该参数不需要传递,如果无法比较时(自定义类型),需要用户自己显式传递比较规则(一般情况下按照。比如:现在要建立一个英汉互译的字典,那该字典中必然有英文单词与其对应的中文含义,而且,英文单词与其中文含义是一一对应的关系,即通过该应该单词,在词典中就可以找到与其对应的中文含义。2. 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。原创 2022-09-23 21:29:26 · 201 阅读 · 0 评论 -
数据结构之二叉搜索树
所以实际中搜索二叉树,极端情况下没有办法保证效率,所以后面会对搜索二叉树进一步扩展延申:AVLTree,红黑树.他们对搜索二叉树,左右高度提出了要求,非常接近完全二叉树,他们的效率可以达到O(logN)对有n个结点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是结点在二叉搜索树的深度的函数,即。再比如统计单词次数,统计成功后,给定单词就可快速找到其出现的次数,单词与其出现次数就是。·为键值对构造二叉搜索树,注意:二叉搜索树需要比较,a. 树为空,则直接插入。原创 2022-09-19 21:02:39 · 975 阅读 · 0 评论 -
C++之多态
这里跟前面菱形继承中的虚拟继承是不一样的,他们之间虽然都用到了virtual关键字,但是他们的使用场景完全不一样,解决的问题也是不一样的,两者之间没有关联,虚继承产生的叫做虚基表,虚基表里面存的距离虚基类的偏移量.)答:抽象类强制重写了虚函数,因为如果子类不重写虚函数,子类也是抽象类,无法实例化对象,其次抽象类可以用来表示现实世界中没有具体实例化对象的模型。,这里我们发现Func1完成了重写,所以d的虚表中存的是重写的Derive::Func1,所以虚函数的重写也叫作覆盖,覆盖就是指虚表中虚函数的覆盖。原创 2022-09-16 17:49:19 · 509 阅读 · 0 评论 -
C++中的继承
实际尽量多去用组合。(B里面既可以用A的公有成员,也可以用保护的成员,也就是说,A所有成员对于B都是透明的,B可以随便使用,关联度很高,A的改变基本都会对B造成影响)术语“白箱”是相对可视性而言:在继承方式中,基类的内部细节对子类可见。(C只能用A公有的成员,A的私有成员对C是不透明的,C和A关联度很低,A的改变对C的影响小),因为对象的内部细节是不可见的。上图是菱形虚拟继承的内存对象成员模型:这里可以分析出D对象中将A放到的了对象组成的最下面,这个A同时属于B和C,那么B和C如何去找到公共的A呢?原创 2022-09-13 00:43:25 · 386 阅读 · 0 评论 -
C++之模板进阶
有时候,编译默认函数模板或者类模板在一些特殊场景下不能正确处理需要逻辑,需要针对一些情况进行特殊化处理,就要做模板的特化。非类型形参:就是用一个整型常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。偏特化并不仅仅是指特化部分参数,而是针对模板参数更进一步的条件限制所设计出来的一个特化版本。类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生。是不允许作为非类型模板参数的。原创 2022-09-10 23:07:38 · 153 阅读 · 0 评论 -
C++之stack和queue的介绍使用
2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。3. 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。,导致效率低下,而序列式场景中,可能需要经常遍历,因此在实际中,需要线性结构时,大多数情况下优先考虑vector和list,deque的应用并不多,而目前能看到的一个应用就是,原创 2022-09-10 21:04:41 · 250 阅读 · 0 评论 -
360度无死角刨析C++STL中list的使用和实现,list与vector的对比
【本节目标】·1. list的介绍及使用·2. list的深度剖析及模拟实现·3. list与vector的对比原创 2022-09-07 23:51:51 · 346 阅读 · 0 评论 -
LeetCode557.反转字符串中的单词 III LeetCode43字符串相乘
43. 字符串相乘 - 力扣(LeetCode)原创 2022-08-16 02:50:52 · 125 阅读 · 0 评论 -
LeetCode125验证一个字符串是否是回文 415字符串相加 541反转字符串 II
题一:125. 验证回文串 - 力扣(LeetCode)解决此题之前首先来学习一个库函数:题二:415. 字符串相加 - 力扣(LeetCode)原创 2022-08-15 23:23:24 · 1117 阅读 · 0 评论 -
LeetCode917仅仅反转字母387找字符串中第一个只出现一次的字符
牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力。387. 字符串中的第一个唯一字符 - 力扣(LeetCode)字符串最后一个单词的长度_牛客题霸_牛客网。...原创 2022-08-15 20:42:44 · 1304 阅读 · 0 评论 -
牛客网KY222打印日期 牛客网KY258累加天数
牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力。【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力。C++中%d 和 %04d有什么区别?打印日期_牛客题霸_牛客网。日期累加_牛客题霸_牛客网。...原创 2022-08-13 19:10:47 · 434 阅读 · 0 评论 -
牛客网HJ73计算日期到天数转换 牛客网KY111日期差值
牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力。【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力。计算日期到天数转换_牛客题霸_牛客网。日期差值_牛客题霸_牛客网。............原创 2022-08-11 03:44:01 · 336 阅读 · 0 评论 -
通过一道简单的累加题,加深对C++匿名对象,static静态函数静态变量,构造函数,内部类的理解
3.这个数组在实例化的时候会调用构造函数,那么我们就可以利用构造函数做文章,也就是在构造函数内部去执行累加的过程,这里就好比把Sum()这个构造函数当成while循环一个道理,此处的Sum()这个函数就好比像是一个while或for循环的关键字一样,而里面的具体执行细节都是一样的。并且我们定义的这个类需要注意几点:通过_i这样的static静态变量来完成从1到n的循环,用_ret静态变量的方式来记录和,静态成员变量属于整个类,所以对象生命周期是在整个程序运行期间,在类的成员函数中可以随便访问,...原创 2022-08-09 04:00:42 · 273 阅读 · 0 评论 -
C++初识-vector
【本节目标】·1.vector的介绍及使用·2.vector深度剖析及模拟实现1.vector的介绍及使用1.1 vector的介绍1. vector是表示可变大小数组的序列容器。2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3. 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为原创 2022-05-05 13:55:37 · 1023 阅读 · 0 评论 -
根据艾宾浩斯遗忘曲线利用日期类给自己指定一份背六级单词的计划时间表
背景:还有一个多月就要考英语六级了,昨晚躺在床上苦苦焦虑单词还没有背,这可咋整啊,于是就想到了给自己整理一个详细科学的记忆表来督促自己背单词。按照平常高中时候可能就自己拿笔傻傻地在纸上立着flag了,昨晚在梦里突然想起了可以利用学过的C++日期类给自己指定一份单词记忆表,我恍然大悟,赶紧爬起床敲起了代码,开始写上这份日期表。有时候总是在刷题,刷了一些题目过后,可能题目思路掌握了,但是似乎很多都没有真正去理解其核心含义。为何不自己针对自己的实际生活学习需求出发,利用编程去便利我们的生活和学习。.原创 2022-05-05 09:10:26 · 605 阅读 · 1 评论 -
C++之string类(·标准库中的string类·string类的模拟实现)
【本节目标】·1. 为什么要学习string类·2. 标准库中的string类·3. string类的模拟实现1. 为什么学习string类?1.1 C语言中的字符串2. 标准库中的string类2.1 string类2.2 string类的常用接口说明3. string类的模拟实现3.1 经典的string类问题3.2 浅拷贝3.3 深拷贝3.3.1 传统版写法的string类3.3.2 现代版写法的string类3.4写时拷贝(了解)3.5..原创 2022-04-26 20:58:28 · 1855 阅读 · 0 评论 -
C++的STL简介(·什么是STL·STL的版本·STL的六大组件·STL的重要性· 如何学习STL·STL的缺陷)
【本节目标】·1. 什么是STL·2. STL的版本·3. STL的六大组件·4. STL的重要性·5. 如何学习STL·6.STL的缺陷1. 什么是STLSTL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。2. STL的版本·原始版本Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任.原创 2022-04-13 17:31:12 · 859 阅读 · 2 评论 -
C++模板(· 泛型编程·函数模板·类模板)
【本节目标】·1. 泛型编程·2. 函数模板·3. 类模板1. 泛型编程如何实现一个通用的交换函数呢?void Swap(int& left, int& right){ int temp = left; left = right; right = temp;}void Swap(double& left, double& right){ double temp = left; left = right; right = temp;.原创 2022-04-13 16:47:30 · 180 阅读 · 0 评论 -
C/C++内存管理(C/C++内存分布· C语言中动态内存管理方式·C++中动态内存管理· operator new与operator delete函数· new和delete的实现原理)
【本节目标】·1. C/C++内存分布·2. C语言中动态内存管理方式·3. C++中动态内存管理·4. operator new与operator delete函数·5. new和delete的实现原理·6. 定位new表达式(placement-new)·7. 常见面试题1. C/C++内存分布我们先来看下面的一段代码和相关问题:int globalVar = 1;static int staticGlobalVar = 1;void Test(){ stat.原创 2022-04-13 16:07:59 · 179 阅读 · 0 评论 -
C++之类和对象(下)(再谈构造函数,C++11 的成员初始化新玩法,友元,static成员,内部类, 再次理解封装)
【本节目标】·1. 再谈构造函数·2.C++11 的成员初始化新玩法。·3. 友元·4. static成员·5. 内部类·6. 再次理解封装1. 再谈构造函数1.1 构造函数体赋值在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。class Date{public: Date(int year, int month, int day) { _year = year; _month = month; _day = day;.....原创 2022-04-10 01:17:06 · 254 阅读 · 0 评论 -
C++之类与对象(中)(类的6个默认成员函数,构造函数,析构函数, 拷贝构造函数, 赋值操作符重载, 默认拷贝构造与赋值运算符重载的问题,const成员函数, 取地址及const取地址操作符重载)
[本节目标]·1.类的6个默认成员函数·2. 构造函数·3. 析构函数·4. 拷贝构造函数·5. 赋值操作符重载·6. 默认拷贝构造与赋值运算符重载的问题·7. const成员函数·8. 取地址及const取地址操作符重载1.类的6个默认成员函数如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。class Date {};2. 构造函数2.1 概念对于以下日期类:..原创 2022-04-08 18:03:57 · 135 阅读 · 0 评论 -
C++日期类的实现
日期加减天数思路图解:代码:test.c#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include"Date.h"using namespace std;void TestData1(){ Date d1; Date d2(2022, 4, 6); Date d3(2000, 4, 6); d1.Print(); d2.Print(); d3.Print();}void TestData2().原创 2022-04-07 22:52:38 · 488 阅读 · 0 评论 -
C++之类与对象(上)(面向过程和面向对象初步认识,类的引入,类的定义,类的作用域,类的实例化,类的访问限定符及封装,类的对象大小的计算,类成员函数的this指针)
[本节目标]·1.面向过程和面向对象初步认识·2.类的引入·3.类的定义·4.类的作用域·5.类的实例化·6.类的访问限定符及封装·7.类的对象大小的计算·8.类成员函数的this指针1.面向过程和面向对象初步认识C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。2.类的引入C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定.原创 2022-04-05 21:31:52 · 812 阅读 · 0 评论 -
C++初识(C++关键字,命名空间,输入&输出,缺省函数,函数重载,引用,内联函数,auto关键字,基于范围的for循环,指针空值nullptr)入门级
本节目标:·1. C++关键字·2. 命名空间·3. C++输入&输出·4. 缺省参数·5. 函数重载·6. 引用·7. 内联函数·8. auto关键字(C++11)·9. 基于范围的for循环(C++11)·10. 指针空值---nullptr(C++11)1. C++关键字(C++98)C++总计63个关键字,C语言32个关键字2. 命名空间在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用.原创 2022-04-04 11:16:10 · 688 阅读 · 1 评论