
C++
AlexMercer1012
这个作者很懒,什么都没留下…
展开
-
[C++刷题]三题学会 前缀和 算法
一、问题本质分析 需求场景:需要快速响应大量区间求和查询暴力法缺陷:传统遍历求和时间复杂度O(n*m),当n和m都达到1e5时运算量达到1e10,必然超时 优化目标:将单次查询复杂度降至O(1),总时间复杂度优化为O(n+m) 二、前缀和核心思想 预处理阶段 构建sum数组:sum[i]表示前i个元素的和 递推关系:sum[i] = sum[i-1] + a[i] 初始化技巧:sum[0] = 0(作为基准值) 查询阶段 区间[l, r]和公式:sum[r] - sum[l-1]原创 2025-02-20 10:30:00 · 972 阅读 · 0 评论 -
[C++刷题]三道暴力枚举 经典题 详解
解题思路 问题本质:在多个矩形中寻找最后一个覆盖目标点的矩形 暴力策略:逆向遍历矩形列表(后输入的矩形视为上层覆盖) 优化要点:利用输入顺序隐含的覆盖关系,时间复杂度O(n)原创 2025-02-19 11:22:27 · 310 阅读 · 0 评论 -
[C++刷题]使用sort()对字符串中的字符排序
将单词 “snake” 的字母按字母表顺序重新排列,输出排序后的新字符串。 字符串操作:`string` 类的基本方法 排序算法:标准库 sort 函数(平均时间复杂度 O(n log n)) 空间优化:原地排序避免额外空间开销原创 2025-02-19 11:09:50 · 954 阅读 · 0 评论 -
[算法学习笔记]1. 枚举与暴力
枚举是基于已有知识来猜测答案的问题求解策略。即在已知可能答案的范围内,通过逐一尝试寻找符合条件的解。暴力算法直接模拟题目要求的操作来求解问题,强调严格遵循题目描述的步骤实现。原创 2025-02-18 19:07:45 · 943 阅读 · 0 评论 -
[C++提高编程]笔记 1.2.6 模板的局限性
局限性: 模板的通用性并不是万能的 总结: 1. 利用具体化的模板,可以解决自定义类型的通用化 2. 学习模板并不是为了写模板,而是在STL能够运用系统提供的模板原创 2025-01-15 16:43:04 · 238 阅读 · 0 评论 -
[C++提高编程]笔记 1.2.4 普通函数与函数模板的区别1.2.5普通函数与函数模板的调用规则
普通函数与函数模板区别:1. 普通函数调用时可以发生自动类型转换(隐式类型转换)2. 函数模板调用时,如果利用自动类型推导,不会发生隐式类型转换3. 如果利用显示指定类型的方式,可以发生隐式类型转换调用规则如下:1. 如果函数模板和普通函数都可以实现,优先调用普通函数2. 可以通过空模板参数列表来强制调用函数模板3. 函数模板也可以发生重载4. 如果函数模板可以产生更好的匹配,优先调用函数模板原创 2025-01-15 16:05:41 · 315 阅读 · 0 评论 -
[C++提高编程]笔记 1.2.2 函数模板注意事项 1.2.3案例
注意事项:自动类型推导,必须推导出一致的数据类型`T`, 才可以使用模板必须要确定出`T`的数据类型,才可以使用`T`原创 2025-01-14 11:20:14 · 176 阅读 · 0 评论 -
[C++提高编程]笔记 1.1 模板概念1.2函数模板
通用的模具,提高复用性 特点:不可以直接使用,只是一个框架 模板的通用并不是万能的 1.2 函数模板 C++ 两种编程思想: 面向对象的编程 泛型编程 C++提供两种模板机制: 函数模板和类模板 1.2.1 函数模板语法 函数模板的作用: 建立一个通用函数,其函数返回值类型和形参类型可以不具体指定,用一个虚拟的类型来代表原创 2025-01-13 18:17:57 · 214 阅读 · 0 评论 -
[C++提高编程]笔记 2 STL初识
长久以来,软件界一直希望建立一种可重复利用的东西 C++的面向对象和泛型编程思想,目的就是复用性的提升 大多情况下,数据结构和算法都未能有一套标准, 导致被迫从事大量重复工作 为了建立数据结构和算法的一套标准, 诞生了STL原创 2025-01-13 17:30:53 · 378 阅读 · 0 评论 -
[C++提高编程]异常处理
C++中的异常处理是处理运行时错误的过程。执行异常处理,以便即使在运行时出现错误后也能保持正常的应用程序流转。在C++中,异常是在运行时抛出的事件或对象。所有异常都派生自std::exception类。它是一个可以处理的运行时错误。如果我们不处理异常,它就会打印异常消息并终止程序。原创 2025-01-12 19:02:40 · 361 阅读 · 0 评论 -
[C++刷题] 统计数字字符个数
因为题中给出的字符串中有空格, 故使用`getline`再`s.length()`求字符串长度本题是统计数字个数, 使用的是ASCII码来判断, 如果要求大小写个数也可以这样使用, 也可以使用库函数`isdigit()`、`isalpha()`, 但要记得包含头文件`ctype`原创 2025-01-03 14:37:04 · 355 阅读 · 0 评论 -
[C++刷题] 求回文素数
本题难点主要是回文数的判断思路: 将数字倒置存储, 比较和原数字是否相同, 相同即为回文.可以利用中间变量, 每次取到余数(个位), 赋值给一个临时变量`reversed`由于要留着原来的数字做比较, 所以不能改变原变量, 需要使用中间变量`temp`使用`while(temp>0`或`temp!=0`)每次/10(取数字每一位的方法)最后将倒置的数字和原数字比较原创 2025-01-02 19:49:33 · 981 阅读 · 0 评论 -
[C++ 核心编程]笔记 4.1 封装
封装是C++面向对象三大特性之一。封装的意义: 将属性和行为作为一个整体,表现生活中的事物 将属性和行为加以权限控制原创 2024-11-27 19:53:21 · 534 阅读 · 0 评论 -
【C++】malloc 和 new 的区别:C++ 动态内存分配全解析
是 C 语言中用于动态分配内存的函数,但在 C++ 中,通常用。如果你的代码涉及对象的构造或初始化,不能直接用。具有更多的功能,比如调用构造函数和析构函数。,而应该调整代码来使用 C++ 的初始化方式。来释放数组,可能会导致未定义行为。原创 2024-11-26 20:08:10 · 957 阅读 · 0 评论 -
【EasyX】基本绘图与文字控制, 图像输出 方法
参数错误,找不到对应的函数, 错误 C2665 “outtextxy”: 没有重载函数可以转换所有参数类型 是由于字符集导致的, 解决方案: 在字符串前面加上大写的 L 用TEST()把字符串包起来, _T(), 原理同上 不需要添加任何代码, 进项目->属性->配置属性->高级->字符集.>改为多字节字符集, 推荐使用这个原创 2024-11-26 19:52:46 · 332 阅读 · 0 评论 -
[C++ 核心编程]笔记 5.2.2 二进制方式 读文件
二进制方式读文件主要利用流对象调用成员函数 read 函数原型: `istream& read(char *buffer,int len);` 参数解释: 字符指针`buffer`指向内存中一段存储空间。`len`是读写的字节数 文件输入流对象 可以通过`read`函数,以二进制方式读数据原创 2024-11-24 12:00:00 · 232 阅读 · 0 评论 -
[C++ 核心编程]笔记 5.2.1 二进制方式 写文件
以二进制的方式对文件进行读写操作 打开方式要指定为 ios::binary 5.2.1 写文件二进制方式写文件主要利用流对象调用成员函数 `write` 函数原型: `ostream& write(const char * buffer,int len);` 参数解释: 字符指针`buffer`指向内存中一段存储空间。`len`是读写的字节数 总结: 文件输出流对象 可以通过 `write` 函数,以二进制方式写数据原创 2024-11-24 10:30:00 · 207 阅读 · 0 评论 -
[C++刷题] 基础小知识点(8) 数组在不同存储位置时默认初始化值的不同
存储位置是否默认初始化默认值局部数组否未定义(随机值)全局/静态数组是0(内置类型)动态数组否未定义(随机值)显式初始化是更好的编程习惯,尤其是对于局部或动态数组。原创 2024-11-23 11:00:00 · 367 阅读 · 0 评论 -
[C++刷题] 基础小知识点(7) 将大数组等 移动到 main 函数外
在我们刷题时, 常常会进行开辟大数组等操作,而初学者一般习惯性将变量声明放在main函数中。而在main()函数中声明的变量如果太大, 如,有时编译器会报错:栈区与全局区的差异:将数组移到全局区,可以减轻栈的负担,避免栈溢出。为什么编译器会报错:将数组从函数内部移动到函数外,全局区管理的内存空间通常更大,因此可以解决栈空间不足的问题。以下情况有效:全局声明的数组大小不超过全局区限制:不需要动态分配的情况下:堆区 是另一种选择,通过动态内存分配解决栈不足问题:堆与全局的对比:如果数组大小较大且需要原创 2024-11-23 10:00:00 · 487 阅读 · 0 评论 -
[C++ 核心编程]笔记 5.1.2 读文件
读文件与写文件步骤相似,但是读取方式相对于比较多。打开文件并判断文件是否打开成功。原创 2024-11-22 11:00:00 · 181 阅读 · 0 评论 -
[C++ 核心编程]笔记 5.1.1 写文件
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放通过文件可以将数据持久化C++中对文件操作需要包含头文件ofstreamifstreamfstream。原创 2024-11-22 10:00:00 · 173 阅读 · 0 评论 -
[C++ 核心编程]笔记 4.7.6 多态案例三-电脑组装
将每个零件封装出抽象基类,并且提供不同的厂商生产不同的零件,例如Intel厂商和Lenovo厂商。创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口 测试时组装三台不同的电脑进行工作。电脑主要组成部件为 CPU(用于计算),显卡(用于显示),内存条(用于存储)原创 2024-11-21 10:30:00 · 304 阅读 · 0 评论 -
[C++ 核心编程]笔记 4.7.5 虚析构和纯虚析构
多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码。解决方式: 将父类中的析构函数改为虚析构或者纯虚析构。如果是纯虚析构,该类属于抽象类,无法实例化对象。原创 2024-11-21 10:00:00 · 384 阅读 · 0 评论 -
[C++ 核心编程]笔记 4.7.2 多态案例--计算器类
多态的优点: 1. 代码组织结构清晰 2. 可读性强 3. 利于前期和后期的扩展以及维护 在真实的开发中 提倡 开闭原则 开闭原则: 对扩展进行开放, 对修改进行关闭 总结: C++开发提倡利用多态设计程序架构,因为多态优点很多原创 2024-11-19 11:00:00 · 238 阅读 · 0 评论 -
[C++ 核心编程]笔记 4.7.3 纯虚函数和抽象类
在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容,因此可以将虚函数改为纯虚函数纯虚函数语法:当类中有了纯虚函数,这个类也称为抽象类。原创 2024-11-20 10:30:00 · 308 阅读 · 0 评论 -
[C++ 核心编程]笔记 4.7.1 多态的基本概念
多态是C++面向对象三大特性之一 多态分为两类 静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名 动态多态: 派生类和虚函数实现运行时多态 静态多态和动态多态区别: 静态多态的函数地址早绑定-编译阶段确定函数地址 动态多态的函数地址晚绑定-运行阶段确定函数地址 动态多态 1. 有继承关系 2. 子类重写父类的虚函数 动态多态使用: 父类的指针或引用, 执行于类对象原创 2024-11-19 10:30:00 · 213 阅读 · 0 评论 -
[C++ 核心编程]笔记 4.6 继承
继承是面向对象三大特性之一有些类与类之间存在特殊的关系,例如下图中:我们发现,定义这些类时,下级别的成员除了拥有上一级的共性,还有自己的特性。这个时候我们就可以考虑利用继承的技术,减少重复代码。原创 2024-11-20 10:00:00 · 1176 阅读 · 0 评论 -
[C++ 核心编程]笔记 4.5.6 函数调用运算符重载
1. 函数调用运算符()也可以重载 2. 由于重载后使用的方式非常像函数的调用,因此称为仿函数 3. 仿函数没有固定写法,非常灵活原创 2024-11-14 10:30:00 · 119 阅读 · 0 评论 -
[C++刷题] 基础小知识点(6) 求阶乘, 阶乘的应用,求 e 的值,e^x 的值
求阶乘, 阶乘的应用 求 e 的值 e^x 的值原创 2024-11-13 16:11:51 · 332 阅读 · 0 评论 -
[C++刷题] 基础小知识点(5) 数字反转\求数字位数
1. 求数字位数 2. 存储原数字每一位 3. 根据数组存储的数字计算新数字 要求求逆序数, 而且数据范围较大。 思路: 利用数组存储每位上的数字, 最后再每位*10^i,还原新数字 给定一个整数N,请将该数各个位上数字反转得到一个新数。原创 2024-11-12 10:30:00 · 856 阅读 · 0 评论 -
[C++ 核心编程]笔记 4.5.5 关系运算符重载
关系运算符重载 作用: 重载关系运算符,可以让两个自定义类型对象进行对比操作 原因: 使用C++提供的 == / != 运算符无法对比 class 类型原创 2024-11-11 12:47:35 · 197 阅读 · 0 评论 -
[C++ 核心编程]笔记 4.5.4 赋值运算符重载
编译器提供的赋值运算符是浅拷贝, 如果有属性创建在堆区,写一个析构代码会导致内存的重复释放。原创 2024-11-11 11:26:53 · 472 阅读 · 0 评论 -
[C++刷题] 基础小知识点(4) C++快速求质数/素数
求质数 求素数 快速求质数/素数 cmath math.h c++ cpp原创 2024-11-09 10:30:00 · 680 阅读 · 0 评论 -
[C++ 核心编程]笔记 4.4.4 重载递增运算符
注: 最重要的是后置++中操作的顺序: 先记录结果, 递增, 最后返回。由于要在cout右边输出, 故需要用到上节课的cout的重载。编写重载部分, 需要分为前置++和后置++原创 2024-11-09 10:30:00 · 220 阅读 · 0 评论 -
[C++ 核心编程]笔记 4.5.2 左移运算符重载
重载一般分为成员函数重载和全局函数重载, 但此处一般不实用成员函数重载。此处cout为引用, 相当于起别名, 可以随意命名。则无法链式编程, 所以要将返回类型写为。故只能利用全局函数重载左移运算符。命名后即可正常使用(若返回类型为。可以输出自定义数据类型。(输出流, 可以右键。原创 2024-11-08 10:00:00 · 323 阅读 · 0 评论 -
[C++ 核心编程]笔记 4.5.1 加号运算符重载
运算符重载概念: 对已有的运算符重新进行定,赋予其另一种功能,以适应不同的数据类型。作用: 实现两个自定义数据类型相加的运算 总结1: 对于内置的数据类型的表述式的的运算符是不可能改变的 总结2: 不要滥用运算符重载原创 2024-11-08 10:00:00 · 193 阅读 · 0 评论 -
[C++ 核心编程]笔记 4.4.3 成员函数做友元
使目标成员函数做友元, 即可在另一个类的成员函数访问其中的私有权限。原创 2024-11-07 11:09:23 · 224 阅读 · 0 评论 -
[C++ 核心编程]笔记 4.4.2 类做友元
[C++ 核心编程]笔记 4.4.2 类做友元。GoodGay类是本类的好朋友, 可以访问该类中私有对象原创 2024-11-07 10:00:00 · 228 阅读 · 0 评论 -
[C++ 核心编程]笔记 4.4.1 全局函数做友元
概述:生活中你的家有客厅(Public),有你的卧室(Private)客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去, 但是呢,你也可以允许你的好闺蜜好基友进去。friend友元的三种实现。原创 2024-11-06 21:00:46 · 415 阅读 · 0 评论 -
[C++刷题] 基础小知识点(4) abs() exp() 和 输入验证
基础小知识点(4) abs() exp() 和 输入验证。 fabs()原创 2024-11-06 11:23:58 · 294 阅读 · 0 评论