自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(99)
  • 收藏
  • 关注

原创 C++:智能指针

三种智能指针shared_ptr、unique_ptr和weak_ptr。智能指针与普通指针用法相似,但智能指针可以在适当的时机自动释放内存。使用智能指针可以避免忘记释放内存而导致的内存泄漏问题。智能指针的本质是类(类模板),是对普通指针的封装。1.资源已被释放,但指针未赋空——野指针。头文件<memory>

2025-05-29 21:26:57 512

原创 C++:lambda匿名函数

3.mutable可省略,但要是使用的话()不能省略,对于以值传递方式引入的外部变量,若无mutable则不允许修改(此方式修改的并不是真正外部变量的值)4.若函数体内只有一个return语句或者返回值类型为void,则 ->返回值类型 可以省略。1.[ ]不可省略,内部表明函数体中可以使用哪些外部变量。2.()和参数在不需要参数时可一起省略。匿名函数,可以理解为没有名字的函数。

2025-05-29 20:40:37 369

原创 C++:范围for

直接以代码展示:(以数组为例)

2025-05-25 13:38:29 86

原创 C++:auto自动类型推导

C++11赋予了auto关键字新的含义,可以用来自动类型推导。5.不能作为类中的非静态成员。3.不能作为函数参数。4.不能作为模板参数。6.常用在替换迭代器。

2025-05-25 13:29:33 300

原创 C++:算法

for_each()遍历函数,find()查找函数,sort()排序函数。STL中有很多算法用于操作数据,这里介绍常用的三个。

2025-05-23 20:05:00 88

原创 C++:适配器

总结来说,容器适配器是一种高级的数据结构,它基于其他容器实现,并提供了特定的接口和操作,使得数据操作更加方便和高效。在C++编程中,合理使用容器适配器可以简化代码,提高程序的效率和可维护性。等)来存储数据,并提供一种特定的接口来访问和操作这些数据。容器适配器主要用于解决特定的问题或满足特定的需求,通过改变容器的接口、增加或限制容器的功能,使得数据操作更加方便和高效。容器适配器是C++标准库中的一种特殊类型的容器,它本身不直接存储数据,而是依赖于其他容器(如。

2025-05-23 19:50:52 754

原创 C++:无序容器

无序容器存储的也是键值对元素,他的底层是哈希表,正如他的名称一样,他并不像关联容器那样默认作升序排序。undered_multiset:与undered_set相比,元素可重复。undered_multimap:无序键可重。undered_set:与set相比无序。undered_map:无序键不重。

2025-05-23 19:42:03 317

原创 C++:关联容器set容器,multiset容器

set与map不一样之处在于set的键值和时值是一样的,且个元素的值不能重复,容器会根据键的大小默认按升序排序,set底层也是红黑树。multiset则允许键重复。

2025-05-22 20:01:28 288

原创 C++:关联式容器map容器,multimap容器

map容器存储的都是pair类型的键值对元素,pair<const K,T>,K表示键,T表示数据类型,其各个元素的键必须是唯一的,会按照元素键的大小,默认升序排序。map容器的底层是红黑树。之前提到的四种容器都是序列式容器,本贴将讲述关联式容器中的map容器。而multimap容器存储元素的键可重。multimap:有序键可重。

2025-05-22 19:45:49 839 1

原创 C++:list容器,deque容器

deque容器:双端队列容器,采用分段连续存储的结构。不擅长在序列中间添加或删除元素。list容器:双向链表容器,底层是双向链表。也包含如begin()等成员函数。

2025-05-22 18:46:13 255

原创 C++:vector容器

vector容器与array容器相似,但vector容器是动态的,可以自动扩容。

2025-05-21 19:36:16 384

原创 C++:array容器

它还有一些成员函数,如begin():返回指向容器中第一个元素的随机访问迭代器。array容器是序列容器,它的特点是:静态,固定数目。可以看作更安全的数组。

2025-05-21 19:29:47 309

原创 C++:迭代器

迭代器与指针类似,通过迭代器可以指向容器中的某个元素,还可以对元素进行操作。迭代器统一规范了遍历方式。不同的数据结构可以用统一的方式去遍历。接下来是一个自定义迭代器的代码示例。迭代器的本质:对象。

2025-05-20 18:22:10 499

原创 C++:STL

STL:标准模板库,包含大量的模板类和模板函数,已被完全内置到支持C++的编译器中,不用再额外安装。接下来的帖子将分别进行说明。本帖将简介一下STL。

2025-05-20 18:02:11 553

原创 C++:类模板

C++不仅支持函数模板,还支持类模板。

2025-05-18 17:09:59 104

原创 C++:函数模板

所谓函数模板就是定义一个通用的函数,不指定具体的参数,用一个虚拟参数代替;注意:不要使用默认参数;可以重载但尽量不要重载。当函数调用时,会根据实参判断具体的类型。

2025-05-18 16:58:39 472

原创 C++:单例模式

再比如,某些应用程序需要维护一个全局状态,例如游戏中的玩家信息、电子商务系统中的购物车。单例模式可以提供一个全局唯一的状态容器。比如,当我们在项目中运用网络和数据库时,为了避免多模块重复创建网络连接或数据库实例,导致的资源浪费,我们就可以运用单例模式。单元测试可能更困难,因为单例可能影响测试的独立性。当需要确保只有一个实例时,就要用到单例模式。单例模式就是只能有一个实例化的对象的类。可能导致代码耦合度高,违反单一职责原则。保证实例唯一性,避免资源浪费。提供全局访问点,简化代码结构。

2025-05-16 21:12:09 536

原创 C++:重载=

【代码】C++:重载=

2025-05-16 20:45:09 121

原创 C++:重载>>和<<(输入和输出运算符)

这其中istream表示输入流,cin是istream类的对象;ostream是输出流,cout是ostream类的对象。

2025-05-13 14:27:41 236

原创 C++:重载++和--

自减运算符也是如此。

2025-05-13 14:01:40 202

原创 C++:重载操作符

我们在平常的使用中已经接触到了运算符重载,如“<<”,它既是位移运算符,也可以配合cout进行输出。在C++中我们也可以自己重载。还记得我们之前提到的函数重载吗,它可以使一个函数名有多种功能,操作符的重载也是这个道理,它会使同一个运算符具有多种功能。4.-> [] = ()必须在类内重载。3.重载操作符不允许使用默认参数。2.重载不会改变优先级和结合性。

2025-03-26 21:38:08 363

原创 C++:友元

在C++中,通过对象可以访问类中的public成员,而private所修饰的成员,只能在类内访问。本帖将介绍一种例外情况:友元(friend)。2.友元类(除非必要,一般不要将整个类定义为友元类)1.友元关系是单向的。2.友元不可被继承。

2025-03-26 21:18:51 278

原创 C++:内联函数

内联函数可以用来降低运行时间,当内联函数收到编译器的指示时,即可发生内联:编译器会使用函数的定义体来替代函数调用语句,此行为发生在编译阶段。内联函数适用于代码量少,调用次数频繁的函数。在头文件中实现的函数自动内联(不绝对是)。

2025-03-03 21:53:41 234

原创 C++:多态与虚函数

有虚函数时,父类指针指向父类对象时就会使用父类的成员,指向子类对象时就可以使用子类成员,进而我们引入了多态的概念。3.所有的虚函数地址组成一个虚函数列表(vTable)(本质:函数指针数组)5.在子类中重写的虚函数地址会覆盖掉继承来的虚函数列表中的对应函数的地址。2.3.多态的优点表现在它能提高复用性和拓展性,它的缺点体现在空间,效率以及安全性上。2.多态:父类指针指向子类的对象,通过父类指针调用子类函数,使其具有多种形态。包含纯虚函数的类称为抽象类,抽象类不允许实例化,子类中必须对纯虚函数重写。

2025-03-03 21:31:26 442

原创 C++:将子类赋值给父类

将子类对象赋值给父类时,会舍弃子类中特有的成员。

2025-02-27 20:52:39 105

原创 C++:结构体与类的区别

1.类的默认访问修饰符为私有的即private,结构体的默认访问修饰符为公共的即public;由此可知类的安全级别更高,类比结构体更安全。2.类的默认继承方式为私有的,结构体的默认继承方式为公共的。

2025-02-27 18:56:37 86

原创 C++:多继承和虚继承

虚继承就是让某个类承诺共享他的基类(父类),这个基类称为虚基类。这意味着无论虚基类在继承中出现多少次,在派生类中(子类)只包含一份虚基类的成员。2.为了解决多继承的命名冲突和数据冗长问题,我们就要用到虚继承。一般情况下不要使用多继承,虚继承应在“分叉处”。它涉及的关键字为virtual。

2025-02-27 18:47:38 292

原创 C++:继承的重名问题和构造析构问题

创建子类对象时,先执行父类构造函数,再执行子类构造函数;销毁子类对象时,先执行子类析构函数,在执行父类析构函数。简易记法:“父子子父”

2025-02-27 12:46:33 230

原创 C++:继承

1.当你要创建多个类,他们拥有部分相似的成员,则可以将相似部分提取出来作为父类,然后各个子类继承父类,可以减少代码量。说到继承儿子,我们可以联想到儿子继承父亲的遗产,在编程中我们可以理解为一个类获得另一个类的成员变量和成员函数的过程。例如:子类以protected方式继承父类,则父类中以public访问的成员在子类中的访问方式为protected。2.当你要新建一个类时,发现他与现有的类相似,只是多出某些成员,也可应用继承,同样可以减少代码量。被继承的类叫作父类或基类,继承的类称为子类或派生类。

2025-02-25 21:33:57 479

原创 C++:类之间的关系

类与类的关系分为纵向关系和横向关系,纵向关系即为继承关系(后续帖子会有介绍),横向关系大体上可分为四种:依赖,关联,聚合,组合(此顺序为关系由弱到强,即依赖最弱)。聚合是关联的特例,它类似于一种包含,如公司与员工,家庭与家人,它体现的是整体与部分的关系,整体与部分是可以分离的,可以具有不同的生命周期,部分可以属于多个整体。组合也是关联的特例,组合也称强聚合,与聚合不同的是,组合的部分与整体是不可分的,整体生命周期的结束也意味着部分的结束,如人和人的大脑之间就是组合关系。下面我们来介绍一下这几个关系。

2025-02-19 21:36:13 359

原创 C++:字符串

C++中除了可以使用我们之前文章中提到的C语言风格用法,还可以使用其内置的string类。要想使用它我们先需要引入头文件<string>。除了以上这些函数,还有很多,感兴趣的可以去搜寻。然后我们先来介绍几种初始化方式。

2024-10-28 18:00:55 400

原创 C++:浅拷贝和深拷贝

临时对象:直接调用构造函数,会产生一个临时对象,他的生命周期为当前行局部对象:生命周期为当前作用域。堆区的对象:生命周期为new开始,delete结束。

2024-10-28 17:15:14 153

原创 C++:拷贝构造

拷贝构造函数是参数类型为本类的引用的构造函数,它也叫复制构造函数,它只有一个参数。当没有写拷贝构造函数时,会有一个默认的拷贝构造函数。2,函数的参数是类的对象,那么当函数被调用时,作为参数类对象的拷贝构造函数将被调用。3,如果函数返回值是类的对象,则函数返回时,返回类对象的拷贝构造函数会被调用。1,当一个对象去初始化另一个对象时,会执行拷贝构造。那么什么时候会调用此函数呢?

2024-10-19 17:02:08 253

原创 C++:静态成员

静态成员变量要在类外初始化 去掉static关键字+类型+类名::+变量名。静态成员函数不允许使用非静态成员 静态成员函数没有this指针。静态成员可以不通过对象直接访问 类名::+成员名。静态成员变量不属于任何对象 所有对象共享一份。静态成员涉及到的关键字尾static。静态成员依旧受访问修饰符的约束。

2024-10-04 19:53:48 294

原创 C++:const成员

const修饰成员函数,要放在函数后,称为常函数。常函数不能修改普通成员变量。const修饰的对象,称为常对象。常对象不能修改普通成员变量,只能读取。const修饰成员变量,要在初始化列表中进行初始化。常对象只能使用常函数。

2024-10-04 19:43:01 442

原创 C++:this指针

所有的非静态成员函数都有一个隐藏的参数(本类类型的指针,即this指针)this是c++中的一个关键字也是一个const指针。当对象调用成员函数时 会将对象的地址传递进去。成员变量是独立的 每个对象都有自己的一份。空类可以定义对象,对象大小为一字节。this指针只能在非静态成员函数中使用。成员函数是公共的 所有对象共享一份。this指针不能修改。

2024-10-04 19:32:58 281

原创 C++:malloc与new的区别

malloc与new都可以用来申请空间,除了使用方式外,本帖子将说明他们的一些其他区别。以上这些只是两者间的部分区别,感兴趣的可以去查找二者更为具体的区别。malloc不执行构造函数,free也不执行析构函数。new会执行构造函数,delete也会执行析构函数。malloc释放时用free。new释放时用delete。malloc不能直接赋值。malloc是函数。new可以直接赋值。

2024-09-17 21:41:17 244

原创 C++:析构函数

在销毁对象时,系统也会自动调用一个函数,它就是析构函数。析构函数没有返回值,它的函数名是在类名前加一个 ~ 符号。析构函数没有参数,不能被重载,这也就意味着析构函数只有一个,若没有写虚构函数,则会由一个默认的析构函数。

2024-09-17 21:18:54 379

原创 C++:初始化列表

构造函数在上一篇帖子我们提到了对成员变量初始化的功能,出了在构造函数的函数体中队成员变量一个一个赋值以外,我们还可以采用初始化列表。初始化列表的初始化顺序是按照成员变量的声明顺序。它在构造函数前执行。

2024-09-17 21:07:28 316

原创 C++:构造函数

构造函数也和普通成员函数一样可以重载,创建对象时会根据传递的实参来判断调用哪一个构造函数,若有多个构造函数,那么创建对象时提供的实参必须和其中的一个构造函数相匹配,也就意味着,闯进对象时,只有一个构造函数会被调用。C++中有一种特殊的函数,它叫构造函数,它没有返回值,函数名与类名相同,当创建对象时会自动调用它。它可以在创建对象的同时为其赋值。当类中没有写构造函数时,会存在一个默认的构造函数,它没有参数,函数体中无内容,若写了构造函数,默认构造函数就不存在了。

2024-09-16 20:19:33 767

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除