C++
文章平均质量分 82
…狂奔的蜗牛~
孤独成就算法
展开
-
【重点:单例模式】特殊类设计
单例模式是一种设计模式(Design Pattern),设计模式就是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式的目的就是为了可重用代码、让代码更容易被他人理解、保证代码可靠性程序的重用性。单例模式指的就是一个类只能创建一个对象,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。原创 2023-07-23 15:30:55 · 875 阅读 · 1 评论 -
【C++11】lambda表达式详解
Lambda表达式是现代C++在C ++ 11和更高版本中的一个新的语法糖 ,在C++11、C++14、C++17和C++20中Lambda表达的内容还在不断更新。Lambda表达式(外文名:lambda expression)是一个匿名函数,即没有函数名的函数。原创 2023-07-18 16:18:14 · 556 阅读 · 2 评论 -
【C++11】右值引用(移动构造、移动赋值、万能引用、完美转发)
- C++98中提出了引用的概念,引用即别名,引用变量与其引用实体公共同一块内存空间,而引用的底层是通过指针来实现的,因此使用引用,可以提高程序的可读性。- 为了提高程序运行效率,C++11中引入了右值引用,右值引用也是别名,但其只能对右值引用。为了与C++98中的引用进行区分,C++11将该种方式称之为右值引用。原创 2023-07-15 12:39:26 · 493 阅读 · 0 评论 -
C++多态
多态就是函数调用的多种形态,使用多态能够使得不同的对象去完成同一件事时,产生不同的动作和结果。原创 2023-07-14 11:24:24 · 550 阅读 · 0 评论 -
【static_cast、reinterpret_cast、const_cast、dynamic_cast】C++类型转换
因此C++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符,分别是`static_cast、reinterpret_cast、const_cast`和`dynamic_cast`。原创 2023-05-09 16:25:39 · 932 阅读 · 1 评论 -
【C++】智能指针
学习目标1.为什么需要智能指针?2. 内存泄漏3.智能指针的使用及原理4.C++11和boost中智能指针的关系原创 2023-05-07 15:30:44 · 1142 阅读 · 2 评论 -
bitset(位图)的使用与模拟实现
所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。原创 2023-04-26 09:30:25 · 1026 阅读 · 0 评论 -
【STL系列】unordered_set和unordered_map
在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时的效率可达到O(logN),即最差情况下需要比较红黑树的高度次,但当树中的结点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同。unordered_set是不按特定顺序存储键值的关联式容器,其允许通过键值快速的索引到对应的元素。原创 2023-04-14 18:30:53 · 1033 阅读 · 0 评论 -
【C++】何为枚举类型
上面声明了一个枚举类型weekday,花括号中Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday称为枚举元素或枚举常量,表示这个类型的变量的值只能是以上7个值之一,它们是用户自己定义的标识符。因为枚举数据类型的符号名称与整数值相关联,所以它们可以在 switch 语句中使用,如下面的程序所示,该程序还演示了可以使用枚举的数据类型,而不实际创建该类型的任何变量。在上述示例中,Tom 的值将是 0,Sharon 的值为 1,等等。原创 2022-12-19 19:50:26 · 163 阅读 · 0 评论 -
C++11基础认识
C++11的一些基础了解认识~原创 2022-10-06 23:43:53 · 328 阅读 · 0 评论 -
【STL系列】(set、map、multiset、multimap)介绍及使用
1.关联式容器如果你接触过STL中的部分容器,比如:vector、list、deque、forward_list(C++11)等,那你应该制动哦这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。那什么是关联式容器?它与序列式容器有什么区别?关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。比如:set、map、unordered_set、unordered_map等。贴士原创 2022-04-06 23:48:30 · 1916 阅读 · 20 评论 -
【带你吃透C++】模板详解
🎃 引入:泛型编程泛型编程最初诞生于 C++ 中,由 Alexander Stepanov[2] 和 David Musser[3] 创立。目的是为了实现 C++ 的 STL (标准模板库)。其语言支持机制就是模板( Templates )。模板的精神其实很简单:参数化类型。换句话说,把一个原本特定于某个类型的算法或类当中的类型信息抽掉,抽出来做成模板参数 T 。原创 2022-03-19 16:17:38 · 1981 阅读 · 33 评论 -
【带你吃透C++】 —— 函数模板与类模板
#include<iostream>using namespace std;//模板// C语言为什么不支持模板,因为它不支持泛型编程(例如C++中的模板),C语言中的宏,void *指针 ,_Generic关键字有类似的作用,但相比模板,就是小巫见大巫了// 原来C语言还可以这样实现“泛型编程”->https://mp.weixin.qq.com/s?src=11×tamp=1642823699&ver=3573&signature=C1gI原创 2022-03-02 16:53:23 · 384 阅读 · 2 评论 -
【带你吃透C++】C++动态内存管理
作为一名编程初学者,通常学习中,发生内存错误是件非常麻烦的事情。编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到。而这些错误大多没有明显的症状,时隐时现,增加了改错的难度。 了解内存分配并掌握运用它是必不可少的。本文主要针对C++动态内存管理内容进行分享,如果想了解C语言动态内存管理可以参考:【C语言进阶】动态内存管理(详细介绍)原创 2022-01-21 22:04:21 · 6804 阅读 · 26 评论 -
【带你吃透C++】友元和内部类
友元友元分为友元函数和友元类。友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多用。友元函数友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend关键字。对于之前实现的日期类,我们现在尝试重载operator<<,但是我们发现没办法将其重载为成员函数,因为cout的输出流对象和隐含的this指针在抢占第一个参数的位置:this指针默认是第一个参数,即左操作数,但是实际使用中转载 2022-01-19 13:27:36 · 245 阅读 · 0 评论 -
【带你吃透C++】全面剖析构造函数(为什么+有什么+怎么用+相关知识拓展)
构造函数:名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次原创 2022-01-13 17:25:57 · 2137 阅读 · 18 评论 -
【带你吃透C++~类和对象】C++11 的成员初始化新玩法
C++11 的成员初始化新玩法C++11支持非静态成员变量在声明时进行初始化赋值但是要注意这里不是初始化,这里是给声明的成员变量缺省值class B{private: // 给的缺省值,这里不是定义, // 这里只是声明,所以这里不是初始化 int _b = 0; int* _p = (int*)malloc(sizeof(int) * 10); //A _aa = A(10); A _aa = 10; // 静态变量不能在这里给缺省值,因为静态成员不在构造函数初始化 // 要原创 2022-01-11 21:31:59 · 387 阅读 · 0 评论 -
【构造函数和析构函数】先构造的后析构,后构造的先析构(例题讲解)
构造函数构造函数的概念构造函数:名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次。以下日期类中的成员函数Date就是一个构造函数。当你用该日期类创建一个对象时,编译器会自动调用该构造函数对新创建的变量进行初始化。class Date{public: Date(int year = 0, int month = 1, int day = 1)// 构造函数 { _year = year; _month = mon原创 2022-01-10 16:42:13 · 1744 阅读 · 4 评论 -
【带你吃透C++】传值传参和传值返回都会生成一次拷贝构造
原创 2022-01-10 12:55:05 · 431 阅读 · 0 评论 -
【带你吃透C++】运算符重载(赋值运算符重载)原来是这么一回事
运算符重载C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,其目的就是让自定义类型可以像内置类型一样可以直接使用运算符进行操作。运算符重载,就是对已有的运算符赋予多重含义,使同一运算符作用于不同类型的数据时产生不同的行为。运算符重载的目的是使得 C++ 中的运算符也能够用来操作对象。运算符重载函数名为:关键字operator后面接需要重载的操作符符号。函数原型:返回值 operator运算符(参数列表)...原创 2022-01-08 18:43:42 · 5691 阅读 · 22 评论 -
【带你吃透C++】深入理解内联函数
内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。内联扩展是用来消除函数调用时的时间开销,通常用于频繁执行的函数。原创 2022-01-07 00:08:16 · 2170 阅读 · 14 评论 -
【带你吃透C++】C++函数重载介绍与原理
函数重载函数重载的概念函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表必须不同。函数重载常用来处理实现功能类似,而数据类型不同的问题。#include <iostream>using namespace std;int Add(int x, int y){ return x + y;}double Add(double x, double y){ return x + y;}int main(){ cout原创 2022-01-06 23:19:27 · 398 阅读 · 0 评论 -
【带你吃透C++】C++命名空间的使用(举例说明)
命名空间在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称都将作用于全局作用域中,可能会导致很多命名冲突。 使用命名空间的目的就是对标识符和名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。命名空间的定义定义命名空间,需要使用到 namespace 关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中1. 普通的命名空间na原创 2022-01-06 23:08:02 · 1120 阅读 · 0 评论 -
【带你吃透C++】初步认识类和this指针
1.面向过程和面向对象初步认识C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成(C++不是一个纯面向对象的语言【兼容C】,既有面向过程也有对象)2.类的引入C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数例:struct Student{void SetStudentInfo(const char* name, const cha原创 2021-11-16 22:56:44 · 956 阅读 · 1 评论 -
【带你吃透C++】引用详解(引用和指针的区别)
引用1 引用概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。原创 2021-11-10 17:44:16 · 1326 阅读 · 0 评论
分享