
C++
文章平均质量分 92
Hey pear!
空杯心态 C/C++ 嵌入式
展开
-
学生信息管理系统C++
运用C++语言描述学生类,每一个类应包含数据成员和成员函数。学生的信息包括学号、姓名、性别、班级、高数成绩和英语成绩。注重面向对象程序设计理论知识的理解与实际的动手编程能力,要求学生设计具有继承与派生以及多态性的类,理解面向对象程序设计的核心的概念。原创 2024-05-31 13:56:19 · 2146 阅读 · 0 评论 -
特殊类的设计——C++
比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。如果单例对象构造十分耗时或者占用很多资源,比如加载插件啊, 初始化网络连接啊,读取文件啊等等,而有可能该对象程序运行时不会用到,那么也要在程序一开始就进行初始化,就会导致程序启动时非常的缓慢。仗时都是人拼人的对砍。后来春秋战国时期,七国之间经常打仗,就发现打仗也是有套路的,后来孙子就总结出了《孙子兵法》。原创 2023-02-07 15:45:15 · 1005 阅读 · 25 评论 -
智能指针——C++
什么是内存泄漏内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。// 1.内存申请了忘记释放 int * p1 =(int *) malloc(sizeof(int));原创 2023-02-06 20:34:46 · 1234 阅读 · 15 评论 -
C++——异常
实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了// 服务器开发中通常使用的异常继承体系 class Exception {public :return _id;// 错误信息 int _id;// 错误码 };原创 2023-01-06 22:52:00 · 828 阅读 · 23 评论 -
C++11
在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中。原创 2022-12-30 16:26:28 · 943 阅读 · 19 评论 -
C++——哈希
unordered_map是存储键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。在unordered_map中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。在内部,unordered_map没有对按照任何特定的顺序排序, 为了能在常数范围内找到key所对应的value,unordered_map将相同哈希值的键值对放在相同的桶中。原创 2022-12-23 20:59:39 · 1643 阅读 · 26 评论 -
map、set(底层结构)——C++
高度平衡二叉搜索树,是以人名命名的一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:如果一棵二叉搜索树是的,它就是AVL树。如果它有n个结点,其高度可保持在O(log2n)O(log_2 n)O(log2n),搜索时间复杂度O(log2nlog_2 nlog2n)平衡因子需要三叉链但是旋转的时候也会变复杂 t AVL树就是在二叉搜索树的基础上引入了平衡因子,因此AVL树也可以看成是二叉搜索树。那么AVL树的插入过程可以分为两步: 原则: 如果在一棵原本是平衡的AVL树中插入一个新节点原创 2022-11-16 21:45:09 · 3042 阅读 · 13 评论 -
map&set——C++
set是按照一定次序存储元素的容器在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。set在底层是用二叉搜索树(红黑树)实现的。原创 2022-11-11 22:54:54 · 540 阅读 · 1 评论 -
二叉搜索树——C++
比如英汉词典就是英文与中文的对应关系,通过英文可以快速找到与其对应的中文,英文单词与其对应的中文就构成一种。再比如统计单词次数,统计成功后,给定单词就可快速找到其出现的次数,单词与其出现次数就是就构成一种键值对。情况d:在它的右子树中寻找中序下的第一个结点(关键码最小),用它的值填补到被删除节点中,再来处理该结点的删除问题–情况c:删除该结点且使被删除节点的双亲结点指向被删除结点的右孩子结点–直接删除。2.统计水果出现的次数——计数器只适用于整型。原创 2022-10-31 22:04:18 · 652 阅读 · 23 评论 -
多态——C++
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写函数之间的关系。原创 2022-10-25 16:29:05 · 1044 阅读 · 25 评论 -
笔试强训48天——day9
A privateC publicD 无定义正确答案:A在重载一个运算符为成员函数时,其参数表中没有任何参数,这说明该运算符是 ( )。原创 2022-10-23 14:20:51 · 802 阅读 · 2 评论 -
继承——C++
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类public是继承方式public :};public :// 姓名 int _age = 18;原创 2022-10-17 22:21:49 · 419 阅读 · 21 评论 -
模板进阶——C++
【优点】模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生增强了代码的灵活性【缺陷】模板会导致代码膨胀问题,也会导致编译时间变长出现模板编译错误时,错误信息非常凌乱,不易定位错误。原创 2022-10-06 21:26:12 · 735 阅读 · 13 评论 -
Stack&Queue——C++
可以在头尾两端进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;1.deque的头尾的插入删除非常合适,相比vector和list而言,很适合去做stack和queue的默认适配容器。deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个动态的二维数组。(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将。栈和队列都是适配器,是由容器转换过来的。底层差别很大,上层都一样,都是一个栈。原创 2022-10-05 17:30:41 · 976 阅读 · 38 评论 -
list——C++
const与普通迭代器的区别在于能否修改数据。算法库sort 要求物理空间是连续的(快排)C++的优势:封装+运算符重载(精华设计)不需要去传哨兵位的头结点,因为默认就传了。我们用一个类去封装,将node*封装进去。后面两个参数是用来控制迭代器的解引用行为。node* 解引用是node 不是数据。普通迭代器和const迭代器是两个类型。用一个结点的指针就可以构造一个迭代器。链表sort(归并:不消耗额外空间)it 转换为 operator。结构体指针,用来访问结构体成员。因为list里的空间不连续。原创 2022-10-02 19:54:55 · 1047 阅读 · 22 评论 -
C++——vector
vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是。原创 2022-09-29 20:15:42 · 7394 阅读 · 23 评论 -
string的模拟实现——C++
默认生成拷贝构造,日期类这样的类我们不写可以用,但是对于string的类不能用,需要我们自己去写。s1依旧会指向那个空间,但是这个空间已经被释放掉了,所以就会形成野指针的问题。初始化 _str的时候_capacity此时还是一个随机值,所以程序会奔溃。两个对象指向同一块空间,会析构两次(同一块空间是不允许释放两次的)此时修改,互相之间也不会存在影响,因为是各自独立的空间。可以换声明顺序(不推荐——》会出现很奇怪的维护问题)空指针的错误是由于空对象string s2导致的。不写用默认的赋值,程序也会奔溃。原创 2022-09-17 17:10:02 · 840 阅读 · 30 评论 -
string——C++
C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,在OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单、方便、快捷,基本。但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可。与find的区别:find 全部匹配 of 只要出现的任意一个字符就返回。iteratior是所有容器通用的访问方式,用法都是类似的。srting 不喜欢用iteratior,因为[]更好用。...原创 2022-08-29 17:47:23 · 501 阅读 · 24 评论 -
模板初阶——C++
class 类模板名 {// 类内成员定义 };// 动态顺序表 // 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具 template < class T > class Vector {public :} // 使用析构函数演示:在类中声明,在类外定义。};原创 2022-08-23 15:08:56 · 444 阅读 · 26 评论 -
内存管理——C++
/不同点——自定义类型 class A {public :} ~ A() {int _a;};// 1、堆上申请空间 A * p1 =(A *) malloc(sizeof(A));return 0;} // 1、释放空间 free(p1);//单个对象 // 1、堆上申请空间 2、调用构造函数初始化 //A* p2 = new A;// 1、调用析构函数清理对象中资源 2、释放空间 delete p2;原创 2022-08-23 14:54:16 · 1094 阅读 · 8 评论 -
类和对象(下)
内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend关键字。:内部类就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象参数来访问外部类中的所有成员。友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。但是友元会增加耦合度,.原创 2022-08-17 17:10:16 · 409 阅读 · 27 评论 -
类和对象(中下)
将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需要重载,比。用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不能改变其含义。...原创 2022-08-02 19:34:54 · 544 阅读 · 31 评论 -
类和对象(中上)
如果一个类中什么成员都没有,简称为空类。空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次 构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并不是开空间创建对象,而是初始化对象。1. 函数名与类名相同。2. 无返回值。(也不用写void)3. 对象实原创 2022-08-02 19:23:33 · 487 阅读 · 14 评论 -
类和对象(上)
虽然C++兼容C语言,但是在定义类中还是更喜欢用class//类体由成员函数和成员变量组成};//一定要注意后面的分号类里定义如果符合inline条件,编译条件过短,编译器可能会当成内联函数处理声明和定义分离规则小函数,想成为inline,直接在类里面定义即可如果是大函数,应该声明和定义分离。...原创 2022-07-22 22:05:06 · 779 阅读 · 37 评论 -
C++入门(二)
在早期C/C++中auto的含义是使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么?C++11中,标准委员会赋予了auto全新的含义即auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得无法通过编译,使用auto定义变量时必须对其进行初始化return0;}++i){++i){...原创 2022-07-21 17:21:53 · 767 阅读 · 18 评论 -
C++入门(上)
2. 命名空间在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。C++的语法基本都是为了补C语言的坑什么是域?注意:同一个域里面不能定义同一个变量不同的域里面就可以定义同一个局部优先,就近原则 当我们用C语言写一下代码的时候,会报错:那么如何解决?用关键字namespace 定义一个命名空间域,就原创 2022-07-10 22:11:09 · 1070 阅读 · 64 评论