日期类(完全讲解版)
1. 类的设计思想
Date
类的设计目的是为了封装和处理日期信息,它提供了对日期的基本操作,如日期加减、日期比较、日期合法性检查等。类中的私有成员int _year
,int _month
,int _day
存储了日期的年、月、日。
类的声明和构造
Date
类的声明:
#pragma once
#include<iostream>
using namespace std;#include<assert.h>// Date 类的声明
class Date
{// 友元函数声明:允许这两个函数访问 Date 类的私有成员// 用于重载输入和输出流运算符friend ostream& operator<<(ostream& out, const Date& d);friend istream& operator>>(istream& in, Date& d);public:// 拷贝赋值运算符:用于将一个 Date 对象赋值给另一个 Date 对象Date& operator=(const Date& d);// 构造函数:初始化 Date 对象的年、月、日,默认值为 1900-01-01Date(int year = 1900, int month = 1, int day = 1);// 打印日期void Print() const;// 获取指定年份和月份的天数// inline 函数:直接定义在类内部,编译器可能会将其内联以提高性能int GetMonthDay(int year, int month){// 验证月份合法性assert(month > 0 && month < 13);// 每个月的天数(非闰年)static int monthDayArray[13] = { -1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };// 如果是闰年且月份为 2,则返回 29 天if (month == 2 && (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){return 29;}else{return monthDayArray[month];}}// 检查日期是否合法bool CheckDate();// 比较运算符重载:用于比较两个日期的先后顺序bool operator<(const Date& d) const; // 小于bool operator<=(const Date& d) const; // 小于等于bool operator>(const Date& d) const; // 大于bool operator>=(const Date& d) const; // 大于等于bool operator==(const Date& d) const; // 等于bool operator!=(const Date& d) const; // 不等于// 日期加法运算符重载// += 运算符:将当前日期增加指定天数Date& operator+=(int day);// + 运算符:返回一个新日期,为当前日期加上指定天数Date operator+(int day) const;// 日期减法运算符重载// -= 运算符:将当前日期减少指定天数Date& operator-=(int day);// - 运算符:返回一个新日期,为当前日期减去指定天数Date operator-(int day) const;// 计算两个日期之间的天数差int operator-(const Date& d) const;// 前置自增运算符:++dDate& operator++();// 后置自增运算符:d++// 使用 int 参数区分前置和后置版本,但参数值未使用Date operator++(int);// 前置自减运算符:--dDate& operator--();// 后置自减运算符:d--Date operator--(int);private:int _year; // 年int _month; // 月int _day; // 日
};// 重载输出流运算符 <<:将 Date 对象格式化输出到流中
ostream& operator<<(ostream& out, const Date& d);// 重载输入流运算符 >>:从流中读取数据并赋值给 Date 对象
istream& operator>>(istream& in, Date& d);
函数实现
#define _CRT_SECURE_NO_WARNINGS 1
#include "Date.h"// 检查日期是否合法
bool Date::CheckDate()
{// 如果月份不在 1~12 之间,或者天数不在 1~指定月份最大天数之间,返回 falseif (_month < 1 || _month > 12|| _day < 1 || _day > GetMonthDay(_year, _month)){return false;}else{return true;}
}// 构造函数:全缺省构造函数
// 初始化年份、月份和天数,默认值为 1900-01-01
// 如果传入的日期不合法,输出提示信息
Date::Date(int year, int month, int day) {_year = year;_month = month;_day = day;if (!CheckDate()) {cout << "日期非法" << endl;}
}// 拷贝构造函数(目前未实现,注释掉)
// Date::Date(const Date& d) {}// 赋值运算符重载
// 用于将一个 Date 对象赋值给另一个
Date& Date::operator=(const Date& d)
{// 检查是否自赋值if (this != &d){_year = d._year;_month = d._month;_day = d._day;}return *this; // 返回自身引用
}// 日期 += 天数
Date& Date::operator+=(int day) {if (day < 0) {// 如果传入负数,调用 -= 重载return *this -= -day;}_day += day;// 处理超出当前月份天数的情况while (_day > GetMonthDay(_year, _month)) {_day -= GetMonthDay(_year, _month); // 减去当前月份的天数++_month; // 增加一个月if (_month == 13) { // 如果超出 12 月,增加一年并重置为 1 月++_year;_month = 1;}}return *this;
}// 日期 + 天数,返回新对象
Date Date::operator+(int day) const {Date tmp = *this;tmp += day; // 调用 += 运算符return tmp;
}// 日期 - 天数,返回新对象
Date Date::operator-(int day) const {Date tmp = *this;tmp -= day; // 调用 -= 运算符return tmp;
}// 日期 -= 天数
Date& Date::operator-=(int day) {if (day > 0) {// 如果传入正数,调用 += 重载return *this += -day;}_day += day; // 减去天数// 处理日期不足当前月的情况while (_day <= 0) {--_month; // 减少一个月if (_month == 0) { // 如果减到 0 月,减少一年并设置为 12 月--_year;_month = 12;}_day += GetMonthDay(_year, _month); // 补足前一个月的天数}return *this;
}// 前置自增 ++d
Date& Date::operator++() {*this += 1; // 日期加 1 天return *this;
}// 后置自增 d++
Date Date::operator++(int) {Date tmp = *this; // 保存当前值*this += 1; // 日期加 1 天return tmp; // 返回旧值
}// 前置自减 --d
Date& Date::operator--() {*this -= 1; // 日期减 1 天return *this;
}// 后置自减 d--
Date Date::operator--(int) {Date tmp = *this; // 保存当前值*this -= 1; // 日期减 1 天return tmp; // 返回旧值
}// > 运算符重载:判断当前日期是否大于另一个日期
bool Date::operator>(const Date& d) const {return !(*this <= d); // 使用 <= 的逆结果
}// == 运算符重载:判断两个日期是否相等
bool Date::operator==(const Date& d) const {return _year == d._year&& _month == d._month&& _day == d._day;
}// >= 运算符重载:判断当前日期是否大于等于另一个日期
bool Date::operator>=(const Date& d) const {return !(*this < d); // 使用 < 的逆结果
}// < 运算符重载:判断当前日期是否小于另一个日期
bool Date::operator<(const Date& d) const {if (_year < d._year) {return true;}else if (_year == d._year) {if (_month < d._month) {return true;}else if (_month == d._month) {return _day < d._day;}}return false;
}// <= 运算符重载:判断当前日期是否小于等于另一个日期
bool Date::operator<=(const Date& d) const {return *this < d || *this == d; // 小于或等于
}// != 运算符重载:判断两个日期是否不相等
bool Date::operator!=(const Date& d) const {return !(*this == d); // 使用 == 的逆结果
}// 日期 - 日期,返回两个日期的天数差
int Date::operator-(const Date& d) const {Date max = *this;Date min = d;int flag = 1; // 标记日期顺序if (*this < d) {max = d;min = *this;flag = -1; // 如果当前日期小于目标日期,反转顺序}int n = 0;while (min != max) { // 从较小日期开始自增,直到等于较大日期++min;++n;}return n * flag; // 返回天数差,带正负号
}// 打印日期
void Date::Print() const {cout << _year << "年" << _month << "月" << _day << "日" << endl;
}// 输出流运算符重载 <<:格式化输出日期
ostream& operator<<(ostream& out, const Date& d) {out << d._year << "年" << d._month << "月" << d._day << "日" << endl;return out;
}// 输入流运算符重载 >>:从输入流中读取日期
istream& operator>>(istream& in, Date& d) {cout << "依次输入年月日";in >> d._year >> d._month >> d._day;if (!d.CheckDate()) {cout << "日期非法" << endl;}return in;
}
2. 成员函数
着重讲一下这几个成员
2.1 构造函数构造函数
Date::Date(int year, int month, int day) {_year = year;_month = month;_day = day;if (!CheckDate()) {cout << "日期非法" << endl;}
}
构造函数的作用是初始化日期对象。当创建一个 Date
对象时,如果没有传入参数,它会默认初始化为 1900-01-01
。如果传入了非法的日期(比如 2 月 30 日),会输出 "日期非法"
的错误信息。
2.2 CheckDate() 函数
CheckDate
是用于验证日期是否合法。它首先检查月份是否在 1~12
之间,然后检查日期是否在该月份的合法天数范围内。如果不合法,返回 false
,否则返回 true
。
bool Date::CheckDate() {if (_month < 1 || _month > 12 || _day < 1 || _day > GetMonthDay(_year, _month)) {return false;}return true;
}
2.3 GetMonthDay() 函数
GetMonthDay()
用于返回指定年份和月份的天数。例如,2 月有 28 天,但如果是闰年则有 29 天。函数使用一个静态数组来存储每个月的天数(非闰年),并特别处理闰年的 2 月。
int Date::GetMonthDay(int year, int month) {static int monthDayArray[13] = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};if (month == 2 && (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {return 29;} else {return monthDayArray[month];}
}
这里使用静态数组 monthDayArray
来存储每个月的天数,方便在需要时快速返回指定月份的天数。对于 2 月,如果年份符合闰年条件,则返回 29 天。
2.4 赋值运算符 operator=
operator=
用于实现日期对象之间的赋值操作。这里的实现首先检查是否是自赋值(即对象和自己赋值),如果不是,才执行赋值操作。
Date& Date::operator=(const Date& d) {if (this != &d) {_year = d._year;_month = d._month;_day = d._day;}return *this;
}
3. 运算符重载
通过运算符重载,Date
类提供了强大的日期计算功能,使得日期加减、比较操作都变得非常直观。
3.1 日期加法和减法运算符重载
operator+=
:将指定天数增加到当前日期,并处理跨月、跨年的情况。operator+
:使用operator+=
来实现日期加法运算符的功能。operator-=
:将指定天数从当前日期中减去,处理跨月、跨年的情况。operator-
:使用operator-=
来实现日期减法运算符的功能。
Date& Date::operator+=(int day) {if (day < 0) {return *this -= -day; // 如果是负数,调用 -= 重载}_day += day;while (_day > GetMonthDay(_year, _month)) { // 超过当前月的天数_day -= GetMonthDay(_year, _month); // 减去当前月份的天数++_month; // 进入下一个月if (_month == 13) { // 如果超出 12 月,进入下一年++_year;_month = 1;}}return *this;
}
3.2 前置和后置自增、前置和后置自减运算符
operator++()
:前置自增,将日期加 1 天,并返回当前对象的引用。operator++(int)
:后置自增,先保存当前日期,再增加 1 天,返回原日期。operator--()
:前置自减,将日期减去 1 天,并返回当前对象的引用。operator--(int)
:后置自减,先保存当前日期,再减去 1 天,返回原日期。
Date& Date::operator++() {*this += 1; // 将当前日期增加 1 天return *this;
}Date Date::operator++(int) {Date tmp = *this; // 保存当前日期*this += 1; // 日期增加 1 天return tmp; // 返回原日期
}Date& Date::operator--() {*this -= 1; // 将当前日期减少 1 天return *this;
}Date Date::operator--(int) {Date tmp = *this; // 保存当前日期*this -= 1; // 日期减少 1 天return tmp; // 返回原日期
}
这些运算符重载使得日期对象可以像整数一样进行加减操作,并支持前置和后置的自增自减。
3.3 日期比较运算符重载
通过重载 operator<
, operator<=
, operator>
, operator>=
, operator==
, operator!=
,我们可以比较两个日期对象的大小、相等与否。这里的比较是基于年、月、日逐一进行的。
例如,operator<
通过年、月、日的逐个比较来判断两个日期的先后:
bool Date::operator<(const Date& d) const {if (_year < d._year) {return true;} else if (_year == d._year) {if (_month < d._month) {return true;} else if (_month == d._month) {return _day < d._day;}}return false;
}
4. 输入输出流运算符重载
通过重载输入输出流运算符,用户可以直接用 cin
和 cout
进行日期的输入输出。
operator<<
将Date
对象输出为 "年 月 日" 的格式。operator>>
从输入流中读取年、月、日,并进行日期合法性检查。
ostream& operator<<(ostream& out, const Date& d) {out << d._year << "年" << d._month << "月" << d._day << "日";return out;
}istream& operator>>(istream& in, Date& d) {in >> d._year >> d._month >> d._day;if (!d.CheckDate()) {cout << "日期非法" << endl;}return in;
}
测试文件
#define _CRT_SECURE_NO_WARNINGS 1
#include "Date.h"
int main() {Date d1, d2;// 输入两个日期cin >> d1 >> d2;// 输出两个日期cout << "输入的日期分别为:" << endl;cout << d1 << d2;
}
结果
虽然已经很完善了,但也还有优化的空间
5.优化
1. CheckDate()
方法改进
目前的 CheckDate()
方法是一个成员函数,修改的是类的成员变量 _year
、_month
和 _day
。调用时应该注意:
- 如果
Date
对象已经不合法,则检查时需要输出错误信息,但Date
构造函数应该尽量避免输出消息,而是通过返回值来告诉调用者是否合法。
解决方式: 在构造函数中调用 CheckDate()
时,输出错误信息,并且返回一个合适的状态或处理方式。
2. 构造函数中的处理
Date::Date(int year, int month, int day) {_year = year;_month = month;_day = day;if (!CheckDate()) {cout << "日期非法" << endl;}
}
当日期不合法时,只是输出了一条错误消息,而没有采取任何补救措施。更好的方式是可以让构造函数抛出异常,或者修正日期。
解决方式:
- 使用异常机制,抛出一个日期非法的异常,方便外部调用者捕捉并处理。
- 另一个方法是让非法日期被调整为一个有效的日期(比如
1900-01-01
)。
Date::Date(int year, int month, int day) {if (month < 1 || month > 12 || day < 1 || day > GetMonthDay(year, month)) {throw invalid_argument("日期非法");}_year = year;_month = month;_day = day;
}
3. operator+=
和 operator-=
重载
计算天数时可能会导致多个 while
循环。这个逻辑可以进一步优化,减少重复代码。
例如,在 operator+=
和 operator-=
中,日期变更后的月份检查可以通过 GetMonthDay()
和年份调整来简化。如果需要,可以提取出一个 Normalize()
函数来调整日期和月份。
4. operator-
重载中可能导致逻辑错误
Date Date::operator-(int day) const {Date tmp = *this;tmp -= day; // 调用 -= 运算符return tmp;
}
operator-
会调用 operator-=
,但这里的问题是 operator-=
本身是在原地修改日期,而 operator-
是要返回新的日期对象。尽管它返回的是新的 Date
对象,但会修改原来的日期,可能会导致意料之外的行为。
解决方式: 将 operator-
的实现改为独立操作,不依赖 operator-=
。
Date Date::operator-(int day) const {Date tmp = *this;tmp._day -= day; // 不直接修改原对象while (tmp._day <= 0) {tmp._month--;if (tmp._month == 0) {tmp._year--;tmp._month = 12;}tmp._day += GetMonthDay(tmp._year, tmp._month);}return tmp;
}
5. operator++
和 operator--
在前置自增/自减和后置自增/自减的实现中,operator++
和 operator--
调用的是 operator+=
和 operator-=
,这也是合理的。然而,可以通过进一步优化减少重复代码,类似于之前提到的优化方案。
6. 输入输出流重载
operator>>
输入错误处理:当日期不合法时,输出错误提示后应该将输入流状态设置为失败,以避免后续操作中使用非法数据。operator<<
输出格式:可以考虑用std::setw
和std::setfill
来确保输出格式的对齐,例如月份和日期为02
格式。
7. 日期验证的 GetMonthDay
调用效率
每次在增减日期时,都需要调用 GetMonthDay
来获取该月的天数,这样会有一定的性能消耗。可以缓存 GetMonthDay
的结果,或者进行日期验证时,避免重复计算。
大概就这样?
上面的代码没有进行下面所谓的优化因为那是相对于我们来说最方便的写法,而且已经效率很高了不是(
相关文章:
日期类(完全讲解版)
1. 类的设计思想 Date 类的设计目的是为了封装和处理日期信息,它提供了对日期的基本操作,如日期加减、日期比较、日期合法性检查等。类中的私有成员 int _year, int _month, int _day 存储了日期的年、月、日。 类的声明和构造 Date 类的声明࿱…...
在线考试系统的公平性和高效性如何保证
随着互联网技术的飞速发展,线上教育已成为现代教育体系中的重要组成部分。而在线考试系统作为线上教育的重要环节,其公平性和高效性成为了广大教育工作者和考生关注的焦点。本文将深入探讨在线考试系统如何保证考试的公平性和高效性,以期为线…...
Spring AI + Ollama 实现调用DeepSeek-R1模型API
一、前言 随着人工智能技术的飞速发展,大语言模型(LLM)在各个领域的应用越来越广泛。DeepSeek 作为一款备受瞩目的国产大语言模型,凭借其强大的自然语言处理能力和丰富的知识储备,迅速成为业界关注的焦点。无论是文本生…...
基于spring的策略模式
集合spring框架的是策略模式,直接上代码 1、接口 public interface PaymentStrategy {//支付接口void pay(double amount);}2、实现类 2.1 实现类一 Component("creditCard") //作为区分的标识 public class CreditCardPayment implements PaymentStr…...
面试编程题
1. 请写出string类的定义,要求有构造函数,析构函数,拷贝,赋值函数。 #include <cstring> #include <algorithm>class String { public:explicit String(const char* str nullptr){if(str){str_ new char[strlen(st…...
AI工具讲解
推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战 目录 模型管理OllamaHugging Face区别 AI模型交互应用程序AnythingLLMCherry Studio AI开发相关Python库 模型管理 Ollama h…...
计算机网络:应用层 —— 动态主机配置协议 DHCP
文章目录 什么是 DHCP?DHCP 的产生背景DHCP 的工作过程工作流程地址分配机制 DHCP 中继代理总结 什么是 DHCP? 动态主机配置协议(DHCP,Dynamic Host Configuration Protocol)是一种网络管理协议,用于自动分…...
基于Spring Boot,结合Redis缓存和RabbitMQ消息队列的站内信系统设计
1. 添加依赖 在pom.xml中添加必要的依赖: <dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependen…...
【JAVA:list中再定义一个list对象,循环赋值不同的list数据,出现追加重复数据问题】
问题描述: list中再定义一个list对象,循环赋值不同的list数据,结果全部都累加到每条数据中了,每条数据中都出现重复数据。 问题解决: 1.创建树结构方法信息 2.创建一个新的 List 对象,避免引用问题 3.使…...
系统思考—价格策略
“我们之所以犯错,是因为我们没有意识到自己处在错误的思维模式中。” —— 卡尔波普尔(哲学家,批判理性主义的创始人) 最近和小伙伴们聊到定价这个变量,深刻感受到系统思考的强大力量。记得在MIT经典沙盘《人民航空经…...
提升信息检索准确性和效率的搜索技巧
一、基础技巧 精准关键词 避免长句子,提取核心关键词(如用“光合作用 步骤”代替“请告诉我光合作用的具体过程”)。 同义词替换:尝试不同表达(如“AI 发展史” vs “人工智能 历史”)。 排除干扰词 使用…...
第3章:在LangChain中如何设置模型参数
本章主要介绍了如何在LangChain4j中配置和调整模型参数,以满足不同的需求和优化模型的表现; 在Java开发框架中通过LangChain4j调用LLM,可以如何设置模型参数,以及对应参数的详细说明,如此以来你可以掌握在智能体开发过…...
java | MyBatis-plus映射和golang映射对比
文章目录 Java实体类和数据库的映射1.默认驼峰命名规则2.自定义字段映射3.关闭驼峰命名规则4.JSON序列化映射 Golang1. 结构体与表的映射2. 字段与列的映射3. 关联关系映射4. 其他映射相关标签 这篇也是做数据库映射方面的对比: Java 实体类和数据库的映射 1.默认…...
CMDB与ITIL的关系:如何通过CMDB实现IT服务管理?
在数字化转型的浪潮中,企业IT系统的复杂性呈指数级增长。如何高效管理海量IT资源、快速响应业务需求,成为每个企业必须面对的挑战。而CMDB(配置管理数据库)和ITIL(信息技术基础设施库)的结合,正…...
【python】网页批量转PDF
安装wkhtmltopdf 网站:wkhtmltopdf wkhtmltopdf http://www.baidu.com/ D:website1.pdf 安装pdfkit库 pip install pdfkit 批量转换代码 import os import pdfkit path_wkthmltopdf rE:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe config pdfkit.configu…...
开题报告——基于Spring Boot的垃圾分类预约回收系统
关于本科毕业设计(论文)开题报告的规定 为切实做好本科毕业设计(论文)的开题报告工作,保证论文质量,特作如下规定: 一、开题报告是本科毕业设计(论文)的必经过程,所有本科生在写作毕业设计(论文)之前都必须作开题报告。 二、开题报告主要检验学生对专业知识的驾驭能…...
第1章大型互联网公司的基础架构——1.10 其他NoSQL数据库
这里我们简单介绍一下其他常见的NoSQL数据库及其适用的场景,其中部分数据库会在后续服务设计章节中正式使用时再做详细介绍。 1.10.1 文档数据库 文档数据库的典型代表是MongoDB和CouchDB。**文档数据库普遍采用JSON格式来存储数据,而不是采用僵硬的行…...
大数据治理之solr的体现
大数据治理之solr的体现 一,大数据治理下Solr的作用 在大数据治理的背景下,Solr作为一个高性能的搜索平台,发挥这重要的作用,下面是Solr在大数据治理中的几个关键作用和体现: 数据索引与检索: 高效检索&a…...
【微信小程序开发】元素顶部重叠
微信小程序开发-顶部元素重叠 原因是开启了自定义导航栏,navigationStyle“custom”(app.json) 把这行删掉就好了...
Spring框架基本使用(Maven详解)
前言: 当我们创建项目的时候,第一步少不了搭建环境的相关准备工作。 那么如果想让我们的项目做起来方便快捷,应该引入更多的管理工具,帮我们管理。 Maven的出现帮我们大大解决了管理的难题!! Maven…...
Hadoop一 HDFS分布式文件系统
一 分布式文件存储 了解为什么海量数据需要使用分布式存储技术 100T数据太大,单台服务器无法承担。于是: 分布式服务器集群 靠数量取胜,多台服务器组合,才能Hold住,如下 分布式不仅仅是解决了能存的问题ÿ…...
Windows 图形显示驱动开发-驱动驻留的供应和回收更改
访问非用户分配 对于 Windows 显示驱动程序模型 (WDDM) v2,有关 套餐 和 回收 的要求正在放宽。 用户模式驱动程序不再需要在内部分配上使用套餐和回收。 空闲/挂起的应用程序将使用 Microsoft DirectX 11.1 中引入的 TrimAPI 删除驱动程序内部资源。 API 级别将继…...
【含文档+PPT+源码】基于Python的图书推荐系统的设计与实现
课程简介: 本课程演示的是一款基于python的图书推荐系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行…...
glob 用法技巧
目录 处理大量文件节省内存 匹配多个文件扩展名 遍历多种格式文件 遍历某一个文件: 查找当前目录和子目录 6. 排除特定文件 7. 大小写不敏感匹配 8. 获取绝对路径 9. 处理特殊字符 处理大量文件节省内存 技巧:用 iglob 替代 glob,逐…...
Windows 启动 SSH 服务
Windows 启动 SSH 服务 一、OpenSSH Server 安装 以 Win10 系统为例 打开设置 -> 系统 -> 可选功能 在 添加的功能 查看是否安装了 OpenSSH 服务 或者 OpenSSH Server 如果没有安装,找到 系统->添加可选功能 -> 查看功能->搜索 OpenSSH 服务 ->…...
基于Llama 3.2-Vision的医学报告生成
记录运用大模型解决医学报告实例,仅介绍本地调用的情况。 前情提要 已安装 Python 显存不少于8G(8G设备上测试成功,其他环境可以自行测试)。 需要安装Ollama (Ollama 是一个允许在本地运行多模态模型的平台)。 方式1࿱…...
Freertos学习第一篇-总体概述
目录 1、基础概念1.1、FreeRTOS概念 2、模块学习2.1、任务2.2、调度(Scheduling)2.3、任务间通讯2.4、时间管理2.5、内存管理 3、各模块串联逻辑3.1、任务创建与调度3.2、任务间通讯3.3、时间管理3.4、内存管理 4、示例代码4.1、代码说明 5、学习路线建议…...
Windows系统安装GPU驱动/CUDA/cuDNN
1、驱动安装步骤 1.1下载驱动 通过浏览器访问Download The Official NVIDIA Drivers | NVIDIA 1.2安装驱动 1.3检查 打开【设备管理器】—【显示适配器】 2、CUDA安装步骤 2.1下载CUDA 官网链接CUDA Toolkit 12.4 Update 1 Downloads | NVIDIA 开发者 2.2安装CUDA 3、cuDN…...
Nginx 安装及配置教程(Windows)【安装】
文章目录 一、 Nginx 下载 1. 官网下载2. 其它渠道 二、 Nginx 安装三、 配置四、 验证五、 其它问题 1. 常用命令2. 跨域问题 软件 / 环境安装及配置目录 一、 Nginx 下载 1. 官网下载 安装地址:https://nginx.org/en/download.html 打开浏览器输入网址 htt…...
一只企鹅如何改变世界
一、历史的转折点:一只企鹅如何改变世界 1991年,芬兰大学生Linus Torvalds在邮件列表中写道:“我正在做一个自由的操作系统(只是爱好,不会像GNU那样庞大专业)”。这个后来被称为Linux内核的项目,与GNU项目的结合,点燃了开源运动的燎原之火。 关键演化: 1996年:Tux企…...
linux进程的内存空间映射(段)
Linux进程的内存空间映射 在 Linux 中,每个进程的内存空间是一个虚拟地址空间,操作系统通过内存映射机制(Memory Mapping)将不同的内存区域分配给不同类型的资源和需求。内存空间映射决定了进程如何访问不同类型的内存࿰…...
前端导出word文件,并包含导出Echarts图表等
基础导出模板 const html <html><head><style>body {font-family: Times New Roman;}h1 {text-align: center;}table {border-collapse: collapse;width: 100%;color: #1118FF;font-weight: 600;}th,td {border: 1px solid black;padding: 8px;text-align: …...
武汉火影数字|VR大空间内容制作:开启沉浸式体验新时代
近年来,随着VR技术的飞速发展,VR大空间制作逐渐成为行业的热门话题。它突破传统VR的空间限制,为用户带来了更加自由、沉浸的体验。无论是娱乐、教育还是工业领域,VR大空间制作都在悄然改变我们的生活和工作方式。 什么是VR大空间制…...
【拥抱AI】GPT Researcher的诞生
一、GPT Researcher 研究过程总结 GPT Researcher 是一个开源的自主智能体,旨在通过利用人工智能技术实现高效、全面且客观的在线研究。它通过一系列创新的设计和优化,解决了传统研究工具(如 AutoGPT)中存在的问题,如…...
Mac端homebrew安装配置
拷打了一下午o3-mini-high,不如这位博主的超强帖子,10分钟结束战斗 跟随该文章即可,2025/2/19亲测可行 mac 安装HomeBrew(100%成功)_mac安装homebrew-CSDN博客文章浏览阅读10w次,点赞258次,收藏837次。一直觉得自己写…...
第四篇:开源生态与蒸馏模型的价值
开篇:从单体模型到生态赋能 DeepSeek-R1 的发布不仅是一款推理模型的亮相,更是一个全新生态的起点。在前三篇中,我们剖析了 R1 的诞生背景、技术核心和性能实力,但它的意义远不止于此。2024 年末,DeepSeek 团队不仅开源了 R1-Zero 和 R1 的完整权重,还推出了基于 Qwen 和…...
C语言——深入理解指针(3)
文章目录 字符指针变量数组指针变量数组指针变量是什么?数组指针变量怎么初始化 二维数组传参的本质函数指针变量函数指针变量的创建函数指针变量的使用两段关于函数的有趣代码typedef关键字 函数指针数组转移表第一种写法:第二种写法(函数指…...
CentOS 7 企业级Redis 7部署指南
CentOS 7 企业级Redis 7部署指南 目录导航 一、环境准备 1.1 依赖管理 二、离线安装 2.1 源码编译安装2.2 目录结构规范 三、生产配置 3.1 主配置文件3.2 配置生成脚本 四、系统集成 4.1 Systemd服务文件4.2 服务管理命令 五、安全加固 5.1 网络安全配置5.2 审计配置 六、性能…...
Linux-C/C++《C++/1、C++基础》(C++语言特性、面向对象等)
这里主要介绍概念为主,主要介绍 C与 C 语言中常用的不同点,和一些新的变化。其中不会去说指针、数据类型、变量类型、判断和循环等这些知识,这些和C 语言基本是一样使用的。我们主要学习 C的面向对象编程,对学习 Qt 有很大的帮助。…...
Java-11
淘天集团2025届春季校园招聘在线笔试-研发 1。设有一个顺序共享栈storageArray[70],其中栈X的栈顶指针top1的初值为-1,栈Y的栈顶指针top2的初值为70,通过不断进行入栈操作,直到storageArray数组已满,此时top1 top2 …...
第4章 信息系统架构(四)
4.6 网络架构 网络是信息技术架构中的基础,不仅是用户请求和获取IT信息资源服务的通道,同时也是 信息系统架构中各类资源融合和调度的枢纽。特别是云计算、大数据和移动互联网技术飞速发 展的今天,网络更加成为实现这些技术跨越的重要环节。…...
用C++ Qt实现安卓电池充电动效 | 打造工业级电量控件
一、为什么需要自定义电池控件? 在工业控制、车机系统、智能硬件等领域的UI开发中,电池状态显示是高频出现的UI组件。通过实现一个支持颜色渐变、动态充电动画、警戒阈值提示的电池控件,开发者可以系统掌握以下核心能力: Qt绘图…...
【第二节】C++设计模式(创建型模式)-抽象工厂模式
目录 引言 一、抽象工厂模式概述 二、抽象工厂模式的应用 三、抽象工厂模式的适用场景 四、抽象工厂模式的优缺点 五、总结 引言 抽象工厂设计模式是一种创建型设计模式,旨在解决一系列相互依赖对象的创建问题。它与工厂方法模式密切相关,但在应用…...
自用题库---面试使用
1、css中如何实现水平垂直居中 方法一:flex: display: flex; justify-content: center; align-item: center;方法二:绝对定位margin:auto: position: absolute; left: 0; right: 0; top: 0; bottom: 0; margin:auto;方法三:已…...
【Mysql】我在广州学Mysql 系列—— 有关日志管理的示例
ℹ️大家好,我是练小杰,今天星期四了,明天周五,美好的周末又要到了!!😆 本文是对MySQL日志管理内容进行练习,后续将添加更多相关知识噢,谢谢各位的支持🙏 复习…...
dify如何升级到0.15.3(目前最新版本)
Docker Compose 部署 警告 docker-legacy 目录中的文件将很快停止维护,并将从存储库中删除。如果您仍在使用它们,请尽快切换到新版本。 备份自定义的 docker-compose YAML 文件(可选) cd docker cp docker-compose.yaml docker-c…...
UNIAPP开发之利用阿里RTC服务实现音视频通话后端THINKPHP5
下面是一个使用ThinkPHP 5实现后端逻辑的示例。我们将创建一个简单的ThinkPHP 5项目来处理生成推流和播流地址的请求。 后端部分(ThinkPHP 5) 1. 初始化ThinkPHP 5项目 首先,确保你已经安装了Composer。然后使用Composer创建一个新的Think…...
使用JWT实现微服务鉴权
目录 一、微服务鉴权 1、思路分析 2、系统微服务签发token 3、网关过滤器验证token 4、测试鉴权功能 前言: 随着微服务架构的广泛应用,服务间的鉴权与安全通信成为系统设计的核心挑战之一。传统的集中式会话管理在分布式场景下面临性能瓶颈和扩展性…...
基于WOA鲸鱼优化的WSN网络最优节点部署算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 鲸鱼优化算法(WOA)是一种模拟座头鲸捕食行为的元启发式优化算法。其主要原理基于座头鲸独特的 “气泡网” 捕食策略,通过数学模…...
TikTok账户安全指南:如何取消两步验证?
TikTok账户安全指南:如何取消两步验证? 在这个数字化的时代,保护我们的在线账户安全变得尤为重要。TikTok,作为全球流行的社交媒体平台,其账户安全更是不容忽视。两步验证作为一种增强账户安全性的措施,虽…...