![](https://img-blog.csdnimg.cn/20190918140053667.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++
C++语法
花生树什么树
更加努力、更加勇敢、更加真诚实意待人。
hschen247@163.com
展开
-
C++ 虚函数和多态
在main函数中,通过将不同派生类对象的地址赋给基类指针,然后调用虚函数makeSound,实际上会根据对象的实际类型调用对应的函数。虚函数(virtual functions)是一种允许在派生类中重写基类函数的特性。通过在基类中声明虚函数,可以在派生类中重新实现(override)该函数,从而实现多态性(polymorphism)。多态(polymorphism)是面向对象编程中的一个重要概念,它允许不同类的对象对同一消息(函数调用)作出不同的响应。主要通过虚函数和继承来实现。原创 2024-03-22 17:44:01 · 312 阅读 · 0 评论 -
C++ 函数指针与回调函数
定义一个函数,将其作为回调函数传递给另一个函数。原创 2024-03-21 23:25:29 · 379 阅读 · 0 评论 -
C++ 指针数组和数组指针
指针数组是一个数组,其中的每个元素都是指针。每个指针可以指向一个特定类型的数据或对象。是一个包含5个整型指针的指针数组,可以将这些指针指向不同的整型变量或数组。是一个指向包含5个整型元素的数组的指针。通过这个指针,可以访问整个数组。数组指针是指向数组的指针,它指向数组的第一个元素。原创 2024-03-21 17:27:13 · 422 阅读 · 0 评论 -
C++ 生成随机数 srand 和 time 函数
srandtime。原创 2024-03-13 10:11:19 · 806 阅读 · 0 评论 -
C++ unordered_map 实现键-值对的无序映射
unordered_map 是 C++ STL 中的一个容器,用于实现键-值对的无序映射。是一个常量,避免意外修改键值对的值,注意事项:使用前需包含对应的头文件。关键字用于自动推断变量的类型,表示使用引用,避免复制键值对。是循环中的迭代变量,它代表。原创 2024-03-01 15:37:54 · 481 阅读 · 0 评论 -
C++ 非递减序列 二路归并
在很多情况下,处理数组或向量时,正常会使用一个额外的变量(如 m)来标记有效元素的数量,而后面的元素被视为无效或者是用来填充的。时,程序中处理 nums1 的部分会自动忽略后面的 0 元素,在这种情况下,只有前 m 个元素会被看作有效元素。通过比较 nums1[i] 和 nums2[j] 的大小来选择较小的元素放入 merged 中,并逐步移动指针 i、j 和 k。最后将 nums1 赋值为合并后的结果 merged,即完成了两个非递减序列的合并。个元素的向量,并且所有元素的初始值都是。原创 2024-02-20 22:59:21 · 387 阅读 · 0 评论 -
批量创建链表节点(推荐智能指针)
为了避免手动释放内存的繁琐过程,可以使用智能指针(如 std::shared_ptr 或 std::unique_ptr)来管理节点的内存。采用 std::vector 来存储链表的数值,而后,循环遍历这些数值,并逐个创建节点,最后将节点连接到链表中。原创 2024-02-04 21:38:40 · 445 阅读 · 0 评论 -
C++ 指针和引用
② 可能出现悬挂指针(dangling pointer)的情况,即指向已释放内存的指针。③ 可能出现内存泄漏(memory leak)的情况,需要手动释放动态分配的内存。① 引用是一个已存在对象的别名,它使用现有对象的名称作为另一种方式来访问该对象。② 可以用于返回引用类型的函数,实现链式操作和赋值语句的连续调用。③ 通过指针进行对象的多态性操作(通过基类指针访问派生类对象)。① 引用不能为空,必须引用一个已存在的对象。③ 对引用的操作实际上是对原始对象的操作。② 实现数组的动态访问和操作。原创 2024-02-03 16:21:09 · 389 阅读 · 0 评论 -
++i(前置自增)和 i++(后置自增)的区别
在 C++ 中,++i和i++都是用于对变量进行自增操作的语法,其中++i(前置自增)先对变量进行自增操作,而后返回自增后的值,而i++(后置自增)先返回变量的值,而后再对变量进行自增操作。++i(前置自增)不会产⽣临时对象,i++(后置自增)必须产⽣临时对象,临时对象会导致效率降低。原创 2024-02-02 14:48:58 · 609 阅读 · 0 评论 -
static关键字 静态成员变量、静态成员函数、静态局部变量
在C++中,static关键字常用于表示静态成员变量、静态成员函数、静态局部变量。其提供了一种在类和函数中共享数据、保持状态和限制作用域的机制。可以使代码更具有模块化和可维护性,并提供了一些特殊的行为和功能。原创 2024-02-02 13:23:14 · 476 阅读 · 0 评论 -
深拷贝和浅拷贝
深拷贝和浅拷贝的适用场景取决于对象的内部数据结构和资源管理方式。但对于包含动态分配内存或其他资源的对象,通常需要使用深拷贝来避免资源管理问题。是指在拷贝对象时,仅仅复制对象的成员变量的值,包括指针成员的值也会被复制,但指针所指向的数据并不会被复制。深拷贝和浅拷贝是在对象拷贝过程中涉及的概念,主要用于描述拷贝操作对于对象内部数据的处理方式。深拷贝通常需要自定义拷贝构造函数和赋值运算符重载来实现,确保指针所指向的数据也被复制。则是在拷贝对象时,不仅复制对象的成员变量的值,还会复制指针所指向的数据。原创 2024-02-01 19:22:21 · 699 阅读 · 0 评论 -
常用的参数传递方式
指针传递常用于C/C++语言中,以实现引用传递的效果。通过指针传递,可以在函数内部修改参数的值,并且可以通过空指针来表示参数的缺失或特殊情况。在引用传递中,函数的参数是原始变量的引用(内存地址),函数内部对参数的修改会影响原始变量的值。适用于传递简单数据类型(如整数、浮点数、字符等)或较小的数据结构。通过引用传递可以实现对函数外部变量的修改,减少了数据的复制开销。适用于传递大型数据结构或需要在函数内部修改参数值的情况。原创 2024-02-01 12:45:35 · 695 阅读 · 0 评论 -
C++ 结构体的构造函数
构造函数创建了一个简单的链表,其中节点的值分别为 1、2、3。每个节点都指向下一个节点。:这是构造函数的定义部分,使用了初始化列表。通过构造函数,我们可以在创建新节点时,指定它的值和下一个节点的指针。对象时,可以通过构造函数传入一个指向下一个节点的指针,并将该指针赋给。对象时,可以通过构造函数传入一个值,并将该值赋给。:这是构造函数的声明部分。:这个初始化列表项将构造函数的参数。:这个初始化列表项将构造函数的参数。分隔的部分,用于初始化成员变量。是一个指针类型,它指向下一个。,参数列表包括一个整数。原创 2024-01-31 20:08:35 · 536 阅读 · 0 评论 -
non-void function does not return a value in all control paths
这将导致编译器报错,因为在所有可能的控制路径上都没有返回值。即在函数中存在某些分支,没有返回值,而函数的返回类型不是。检查相应的代码,找到引发此错误的函数,函数在所有的控制路径上没有返回值。不大于0,函数没有返回语句。原创 2024-01-30 21:37:44 · 1005 阅读 · 0 评论 -
C++不能直接返回数组
在 C++ 中,不能直接返回一个数组。因为数组名表示的是数组的首地址,而在函数返回后,局部变量的内存空间将被释放,导致返回的数组指针指向无效的内存。原创 2024-01-30 13:25:16 · 685 阅读 · 0 评论 -
C++ 声明指针变量
例如int* getArray() , int* 表示 getArray() 函数返回的是一个指向整数类型的指针。其意味着函数返回的是一个地址,该地址指向一个整数值或整数数组的首元素。例如,int* 表示指向整数类型的指针,char* 表示指向字符类型的指针,float* 表示指向浮点数类型的指针,依此类推。例如使用 * 运算符来解引用指针,即获取指针所指向的值。*array 表示获取 array 指针所指向的整数值。其中,int* 表示指向整数类型的指针。原创 2024-01-30 12:51:30 · 418 阅读 · 0 评论 -
C++ 不能用作全局变量名或给定 C 语言的链接
问问自己main函数作为一个函数,后面有没有添加()?C++ 不能用作全局变量名或给定 C 语言的链接。如果没有,建议再给自己两巴掌。原创 2024-01-02 18:33:37 · 387 阅读 · 0 评论 -
MATLAB绘图 将几幅子图放置一幅图像中
【代码】MATLAB绘图 将几幅子图放置一幅图像中。原创 2023-05-01 20:51:47 · 3661 阅读 · 1 评论 -
Visual Studio 升级至支持C++17的版本
Visual Studio 升级至支持C++17的版本原创 2023-04-26 22:20:18 · 1163 阅读 · 0 评论 -
Pycharm修改添加默认镜像
镜像:清华镜像:https://pypi.tuna.tsinghua.edu.cn/simple/豆瓣镜像:http://pypi.douban.com/simple阿里云镜像:http://mirrors.aliyun.com/pypi/simple/原创 2022-04-29 21:36:14 · 689 阅读 · 2 评论 -
排序:1.3、快速排序
文章目录前言一、快速排序二、快速排序源码三、结果前言我们之前介绍的桶排序利用数组排序,虽然操作简便,时间性能上也很是友好,O(M+N),然而却有不少致命的缺陷,比如浪费空间。而冒泡排序虽然解决了空间上的浪费,但是双重循环下的两两互换,在时间性能上却是得不偿失,O(N^2),空有名字的浪漫,却是一无是处。那么是否有一种时间和空间上的双重友好呢?显然是有的,这么我们简单的介绍一下,Charles Antony Richard Hoare先生在1960年提出的快速排序。一、快速排序首先随便给出我们要原创 2022-02-02 17:07:35 · 591 阅读 · 0 评论 -
排序:1.2、冒泡排序
文章目录前言一、冒泡排序原理二、冒泡排序源码三、示例结果四、总结前言在此之前,我们介绍了简单的桶排序,虽然其简易上手,容易操作。但具有较为严重的空间浪费,也难以键值对一一匹配,还有就是当数值是小数,就无法处理,毕竟数组没有小数吧。哈哈哈。这里为了进一步解决其小坑,我们介绍了一种较为简单的冒泡排序。一、冒泡排序原理冒泡排序主要依靠对数组的双重循环,两两比较,对数值进行排序。如数组a[0]-a[4]值为:13.5、64、32、99.9、66第1轮两两比较:64、32、99.9、66、13.5原创 2022-02-01 15:29:16 · 1391 阅读 · 0 评论 -
C++ 动态分配结构体数组
#include <iostream>using namespace std;struct students { char name[20]; int score;};int main(){ int n; cin >> n; students* a = new students[n]; for (int i = 0; i < n; i++) { cin >> a[i].name >> a[i].score; } for原创 2022-02-01 13:27:32 · 3050 阅读 · 0 评论 -
排序:1.1、简单桶排序
文章目录前言一、问题-思路二、源码三、结果前言这里做个简单的桶排序,方便大家对排序有个清晰简单的入门。其操作主要依靠一维数组。一、问题-思路1、自定义数组长度,动态分配数组。int* book = new int[maxNum];2、使其数组全部置为0。book[0]、book[1]……book[maxNum] 均为0。3、输入所需排序的值。比如输入值为98、56、24等,则book[98]、book[56]、book[24]由0变为1。4、判断输出。若book的值大于0,则原创 2022-01-31 15:15:48 · 1032 阅读 · 1 评论 -
sqlite3实现基本创建表和相应的增删改查
文章目录前言一、sqlite3使用基本流程二、源码三、结果前言常见的数据库有Oracle、MySQL、SQLserver等,相应的数据库也为python提供了对应的API接口,方便调用。当然在Python中有内置好了基本的sqlite3这个模块,供我们直接使用,这个已经基本满足我们的基本学习使用,其它的sql库对应的使用也基本一致,只是在一些语法上有所区别。想要进一步学习的同学,可以啃一下对应的官方文档。我这边简短地介绍基本的创建表和增删改查。一、sqlite3使用基本流程1、建立连接con原创 2022-01-20 21:08:49 · 2027 阅读 · 0 评论 -
分治法--最大子段和问题(C++)
文章目录前言一、最大子段和问题二、算法思路三、源码四、举例结果总结前言分治法–最大子段和问题一、最大子段和问题给定的某个序列,由n个整数所构成。最大子段和问题,就是求解该序列某段和最大值。例如,我们所输入的序列r[6]={-20,11,-4,13,-5,-2},则该序列的最大子段和为20。某支股票基金某段时间的最高涨幅,也可以抽象成最大子段和问题,二、算法思路采用分治法的思想,将该序列一分为二,分别求取这两个序列的最大子段和。当然最大字段和也可能跨越在这两段中,即为我们要探讨的第三种情况。原创 2021-12-15 17:53:15 · 4801 阅读 · 0 评论 -
分治法--快速排序(C++)
文章目录前言一、快速排序1.问题2.思路二、源码(C++)1.引入库2.读入数据总结前言分治法–快速排序(C++)一、快速排序快速排序作为应用分治法的完美例子,其主要是按照记录的值对序列进行划分,相比较归并排序,其实快速排序更是一种更为巧妙的方式实现了分而治之的思想。1.问题应用快速排序对一个无序的序列进行升序排序。序列:2.思路这位仁兄讲的实在生动形象,可以参考理解一下。https://blog.csdn.net/xyj2014/article/details/78836888原创 2021-12-15 14:09:44 · 4169 阅读 · 0 评论 -
分治法--归并排序(C++)
文章目录前言一、归并排序二、思路1.问题2.算法三、源码总结前言基于C++的分治法中的归并排序一、归并排序归并排序是分治法中的一个完美的例子,归并排序主要是按照记录在序列中的位置对序列进行划分。这里我们应用归并排序方法对一个记录序列进行升序排序。二、思路1.问题输入的序列为:2、4、7、5、8、1、3、6对这序列进行升序处理。2.算法输入:未排序序列输出:升序序列1、如果s(数组第一位)==t(数组最后一位),则待排序区间只有一个值,无需排列,算法结束;2、计算划分中点:m=(原创 2021-12-13 21:24:50 · 2141 阅读 · 1 评论 -
分治法--数字旋转方阵(C++)
文章目录前言一、分治法二、数字旋转方阵源码(C++)三、动态分配数组四、二维数组作为函数参数传递总结前言分治法--数字旋转方阵涉及的知识点由分治法、数组动态分配和二维数组做参传递。一、分治法分治法将一个难以直接解决的大问题分解为一些规模较小的子问题,分别求解各个子问题,再合并子问题的解得到原问题的解。主要分为三步,即划分,求解子问题,合并。划分的时候主要基于平衡子问题,且最好相互独立。这里我们以数字旋转方阵为例,具体过程详见源码。二、数字旋转方阵源码(C++)//数字旋转方阵#inc原创 2021-12-12 21:57:48 · 4592 阅读 · 0 评论