
C++
文章平均质量分 89
熙曦Sakura
985大连理工大学计算机专业本科生,分享我的学习心得,欢迎大家批评指正
展开
-
【C++11】智能指针
什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存,一般是忘记释放或者发生异常释放程序未能执行导致的。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:普通程序运行一会就结束了出现内存泄漏问题也不大,进程正常结束,页表的映射关系解除,物理内存也可以释放。原创 2025-04-07 12:51:38 · 957 阅读 · 0 评论 -
【C++11】异常
异常处理机制。异常使得我们能够将问题的检测与解决问题的过程分开,程序的一部分负责检测问题的出现,然后把解决问题的任务传递给程序的另一部分,检测环节无须知道问题的处理模块的所有细节。C语言主要通过的形式处理错误,错误码本质就是,拿到错误码以后还要去查询错误信息,比较麻烦。异常是抛出一个对象,这个对象可以携带更全面的各种信息。原创 2025-04-06 19:32:08 · 887 阅读 · 0 评论 -
【C++11】包装器
是一个类模板,也是一个包装器(也叫做适配器)。的实例对象可以包装存储其他的可以调用对象,包括函数指针、仿函数、lambda、bind表达式等,存储的可调用对象被称为std::function的目标。若std::function不含目标,则称它为空。调用空std::function的目标导致抛出std::bad_function_call异常。以上是function的原型,他被定义头文件中。是function的官方文件链接。原创 2025-04-05 18:33:25 · 434 阅读 · 0 评论 -
【C++11】lambda
默认情况下,lambda捕捉列表是被const修饰的,也就是说。原创 2025-04-05 15:51:27 · 855 阅读 · 0 评论 -
【C++11】新的类功能和STL中一些变化
这样只要其他人想要调用就会报错。在C++11中更简单,只需在该函数声明加上=delete即可,该语法。原创 2025-04-05 14:39:02 · 884 阅读 · 0 评论 -
【C++11】可变参数模版
C++11支持可变参数模板,也就是说支持可变数量参数的函数模板和类模板,可变数目的参数被称为参数包,存在两种参数包:模板参数包,表示零或多个模板参数;函数参数包,表示零或多个函数参数。我们用省略号来指出一个模板参数或函数参数表示一个包。class......可变参数模板的原理跟模板类似,本质还是去实例化对应类型和个数的多个函数。这里我们可以使用sizeof...运算符去计算参数包中参数的个数。原理1:编译本质这里会结合引用折叠规则实例化出以下四个函数。原创 2025-04-04 18:25:26 · 378 阅读 · 0 评论 -
【C++11】右值引用和移动语义
C++98的C++语法中就有引用的语法,而C++11中新增了的,C++11之后我们之前学习的引用就叫做。无论左值引用还是右值引用,。原创 2025-04-04 16:27:58 · 823 阅读 · 0 评论 -
【C++11】列表初始化
C++98中一般数组和结构体可以用{}进行初始化。原创 2025-04-03 13:07:27 · 308 阅读 · 0 评论 -
【C++】C++入门概念(一)
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。正常的命名空间定义// bit是命名空间的名字,一般开发中是用项目名字做命名空间名。// 1. 正常的命名空间定义// 命名空间中可以定义变量/函数/类型int val;命名空间可以嵌套//2. 命名空间可以嵌套int a;int b;int c;int d;同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。原创 2024-09-21 12:41:28 · 1533 阅读 · 0 评论 -
【C++】C++入门概念(二)
在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它.auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。return 10;auto b = a;//auto e;无法通过编译,使用auto定义变量时必须对其进行初始化return 0;使用auto定义变量时必须对其进行初始化。原创 2024-09-22 20:13:27 · 1114 阅读 · 0 评论 -
【C++】类和对象(基本概念)
/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。成员函数如果在类中定义,编译器可能会将其当成内联函数处理。类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名::一般情况下,更期望采用第二种方式。原创 2024-09-23 20:04:20 · 1027 阅读 · 0 评论 -
【C++】类和对象(类的默认成员函数)
main函数中不能直接调用Time类的析构函数,实际要释放的是Date类对象,所以编译器会调用Date类的析构函数,而Date没有显式提供,则编译器会给Date类生成一个默认的析构函数,目的是在其内部调用Time类的析构函数,即当Date对象销毁时,要保证其内部每个自定义对象都可以正确销毁main函数中并没有直接调用Time类析构函数,而是显式调用编译器为Date类生成的默认析构函数。而_t是Time类对象,所以在d销毁时,要将其内部包含的Time类的_t对象销毁,所以要调用Time类的析构函数。原创 2024-09-24 15:09:37 · 781 阅读 · 0 评论 -
【C++】类和对象(重载运算符、const对象)
此时用户再在类外自己实现一个全局的赋值运算符重载,就和编译器在类中生成的默认赋值运算符重载冲突了,故赋值运算符重载只能是类的成员函数。运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数。一份,然后给this+1,而temp是临时对象,因此只能以值的方式返回,不能返回引用。隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。原创 2024-09-26 14:16:58 · 1297 阅读 · 0 评论 -
【C++】类和对象(初始化列表/static成员/友元/内部类)
内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化,构造函数体中的语句只能将其称为赋初值,而不能称作初始化。用static修饰的成员函数,称之为静态成员函数。友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend关键字。注意:内部类就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象参数来访问外部类中。原创 2024-09-27 19:46:00 · 1088 阅读 · 0 评论 -
【C++】类和对象(匿名对象)
【代码】【C++】类和对象(匿名对象)原创 2025-03-23 19:05:55 · 369 阅读 · 0 评论 -
【C++】C/C++内存管理(new/delete)
new/delete 和 malloc/free最大区别是new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数。delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;原创 2024-09-28 16:41:18 · 1370 阅读 · 0 评论 -
【C++】模版(初阶)
class 类模板名// 类内成员定义// 动态顺序表// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public :, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表if(_pData)原创 2024-10-01 17:48:06 · 631 阅读 · 0 评论 -
【C++】模版进阶
【代码】【C++】模版进阶。原创 2025-03-27 10:31:27 · 566 阅读 · 0 评论 -
【C++】继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许我们在保持原有类特性的基础上进行扩展,增加方法(成员函数)和属性(成员变量),这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的复用,继承是类设计层次的复用。原创 2025-03-27 10:56:08 · 748 阅读 · 0 评论 -
【C++】多态
*多态是一个继承关系的下的类对象,去调用同一函数,产生了不同的行为。**比如Student继承了Person。Person对象买票全价,Student对象优惠买票。实现多态还有两个必须重要条件:必须是基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,并且完成了虚函数重写/覆盖。说明:要实现多态效果,第一必须是基类的指针或引用,因为只有基类的指针或引用才能既指向基类对象又指向派生类对象;第二派生类必须对基类的虚函数完成重写/覆盖,重写或者覆盖了,基类和派生类之间才能有不同的函数。原创 2025-03-28 17:13:59 · 784 阅读 · 0 评论 -
【C++】string (STL)
在使用string类时,必须包含#include头文件以及;原创 2024-10-09 19:55:37 · 1384 阅读 · 0 评论 -
【C++】vector(STL)
vector iteratoriterator使用接口说明begin获取第一个数据位置的iterator/const_iteratorend获取最后一个数据的下一个位置的iterator/const_iteratorrbegin获取最后一个数据位置的reverse_iteratorrend获取第一个数据前一个位置的reverse_iteratorvector 空间函数名称接口说明size获取数据个数capacity获取容原创 2024-10-12 12:14:06 · 1255 阅读 · 0 评论 -
【C++】list(STL)
【注意】此处大家可将迭代器暂时理解成类似于指针,迭代器失效即迭代器所指向的节点的无效,即该节点被删除了。因为list的底层结构为带头结点的双向循环链表,因此在list中进行插入时是不会导致list的迭代器失效的,只有在删除时才会失效,并且失效的只是指向被删除节点的迭代器,其他迭代器不会受到影响。list与vector的对比vector与list都是STL中非常重要的序列式容器,由于两个容器的底层结构不同,导致其特性以及应用场景不同,其主要不同如下:原创 2024-10-13 18:31:28 · 1428 阅读 · 0 评论 -
【C++】stack(STL)
最小栈栈的压入弹出序列逆波兰式求值原创 2024-10-17 14:30:02 · 633 阅读 · 0 评论 -
【C++】queue/ priority_queue(STL)
优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。容器应该可以通过随机访问迭代器访问,并支持以下操作::检测容器是否为空:返回容器中有效元素个数:原创 2024-10-19 14:58:13 · 1185 阅读 · 0 评论 -
【C++】deque(STL)
deque是一种双开口的"连续"空间的数据结构双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1)。与vector比较,头插效率高,不需要搬移元素;与list比较,空间利用率比较高。原创 2024-10-19 15:49:07 · 1133 阅读 · 0 评论 -
【C++】set(STL)
std::pair的模板定义形式为,其中T1和T2分别是两个成员的类型。// 默认构造函数,成员会进行默认初始化// 使用提供的参数初始化// 使用 make_pair 函数,自动推导类型return 0;在这个示例中,p1使用默认构造函数进行初始化,p2显式地传入参数进行初始化,p3则通过函数创建,该函数可以自动推导类型。集是按特定顺序存储唯一元素的容器。在set中 ,元素的值也标识其本身(该值本身是key,类型为T),并且每个值必须是唯一的。set。原创 2025-03-30 15:32:05 · 271 阅读 · 0 评论 -
【C++】map(STL)
map是关联容器,按照特定次序(按key来比较存储由key和value组合元素)原创 2025-03-30 17:52:32 · 1101 阅读 · 0 评论 -
【C++】哈希(STL)
unordered_set和unordered_multiset参考文档unordered_set类的介绍:原创 2025-04-02 12:22:55 · 679 阅读 · 0 评论 -
Makefile
CC:c编译器的名称,默认值为cc。.cpp .c预编译器的名称默认值为$(CC) -ECC = gcc回显问题,Makefile中的命令都会被打印出来。如果不想打印命令部分 可以使用去除回显。原创 2025-03-20 18:31:50 · 593 阅读 · 0 评论