【C++】类和对象【中上】
目录
- 一、类与对象
- 1、构造函数
- 2、析构函数
- 3、拷贝构造函数
个人主页<—请点击
C++专栏<—请点击
一、类与对象
默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。⼀个类,我们不写的情况下编译器会默认生成以下6个默认成员函数:构造函数、析构函数、拷贝构造函数、赋值重载、普通对象取地址、const对象取地址
,其中前四个很重要。
1、构造函数
构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并不是开空间创建对象,而是对象实例化时初始化对象。构造函数的本质是为了替代初始化函数的功能。
构造函数的特点:
- 函数名与类名相同。
- 无返回值。
- 对象实例化时系统会自动调用对应的构造函数。
- 构造函数可以重载。
- 如果类中没有显式定义构造函数,则
C++
编译器会自动生成⼀个无参的默认构造函数,⼀旦用户显式定义编译器将不再生成。 - 无参构造函数、全缺省构造函数、我们不写构造时编译器默认生成的构造函数,都叫做默认构造函数。也就是说,不传参即可调用的都是默认构造函数。但是这三个函数有且只有⼀个存在,不能同时存在。
- 我们不写,编译器默认生成的构造函数,对内置类型成员变量的初始化没有要求,也就是说是是否初始化是不确定的,看编译器。对于自定义类型成员变量,要求调用这个成员变量的默认构造函数初始化。
在C++
中,内置类型就是语言提供的原生数据类型,内置类型可分为基本数据类型(如整数、浮点数、字符、布尔值等)和枚举类型。自定义类型就是我们使用class/struct
等自己定义的类型。
我们上期博客已经写了日期类,我们这里直接拷贝过来:
#include <iostream>
using namespace std;class Date
{
public:void print(){cout << _year <<"/"<< _month<<"/" << _day << endl;}
private:int _year;int _month;int _day;
};int main()
{Date d1;return 0;
}
我们通过刚刚拷贝函数的概念知道编译器会默认生成构造函数,只是对内置类型不知道是否初始化,那我们不妨调用一下d1.print();
看看到底初始化没有。
可以看出编译器默认生成的构造函数,没有对内置类型进行初始化,此时就需要我们自己写了。
默认构造函数一:
Date()
{_year = 1;_month = 1;_day = 1;
}
此时我们再次执行程序,查看:
由于我们显示写了构造函数,所以编译器没有再自己生成默认构造函数,而是用了我们写的默认构造函数。
默认构造函数二:
Date(int year, int month, int day)
{_year = year;_month = month;_day = day;
}
// 对象实例化一定会调用对应的构造,保证了对象实例化出来一定被初始化了
Date d1;
d1.print();Date d2(2025, 1, 1);
//构造函数调用的特殊
d2.print();
我们执行上面的代码:
上下对比就可以看出这次程序没有调用一函数,因为只有二函数符合代码逻辑。
另外还有就是全缺省的构造函数,和一函数是一样的。
Date(int year = 2025, int month = 1, int day = 2)
{_year = year;_month = month;_day = day;
}
注意:如果通过无参构造函数创建对象时,对象后面不用跟括号,否则编译器无法区分这里是函数声明还是实例化对象。
2、析构函数
析构函数与构造函数功能相反,析构函数不是完成对对象本身的销毁,C++
规定对象在销毁时会自动调用析构函数,完成对象中资源的清理释放工作。有动态开辟内存,其中存在资源的才需要释放,而日期类没有资源需要释放,严格来说也就不需要析构函数。
析构函数的特点:
- 析构函数名是在类名前加上字符
~
。 - 无参数无返回值。
- ⼀个类只能有⼀个析构函数。若未显式定义,系统会自动生成默认的析构函数。
- 对象生命周期结束时,系统会自动调用析构函数。
- 跟构造函数类似,我们不写编译器自动生成的析构函数对内置类型成员不做处理,自定义类型成员会调用它的析构函数。
- 还需要注意的是我们显示写析构函数,对于自定义类型成员也会调用它的析构,也就是说自定义类型成员无论什么情况都会自动调用它的析构函数。
- 如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数,如
Date
;如果默认生成的析构就可以用,也就不需要显示写析构,但是有资源申请时,⼀定要自己写析构,否则会造成内存泄漏。 - ⼀个局部域的多个对象,
C++
规定后定义的先析构。
我们写一个栈类来看看,当然其中只包括构造函数和析构函数:
#include <iostream>
using namespace std;class Stack
{
public:Stack(int n = 4){cout << "Stack(int n = 4)" << endl;_a = (int*)malloc(sizeof(int) * n);_capacity = n;_top = 0;}~Stack(){cout << "~Stack()" << endl;free(_a);_capacity = 0;_top = 0;}
private:int* _a;int _capacity;int _top;
};int main()
{Stack d1;return 0;
}
我在构造和析构函数上分别做了记号我们看看调用情况:
可以看到程序分别调用了构造函数初始化栈,并且在生命周期结束时还用自动调用了析构函数防止内存泄漏。我们目前写的类中都是内置类型的成员变量,那我们不妨用两个栈做成员变量,实现一个队列类。
class Queue
{
private:Stack _a;Stack _b;
};
我们执行下列程序:
int main()
{Queue d1;return 0;
}
我们没有在队列类中实现构造函数和析构函数,但是Stack
是自定义成员变量,程序会自动调用这个成员变量的构造函数,同样的程序会在生命周期结束时自动调用Stack
成员变量的析构函数,所以Queue
不用自己实现构造函数和析构函数,编译器自动生成的就可以使用。
3、拷贝构造函数
如果⼀个构造函数的第⼀个参数是自身类类型的引用,且任何额外的参数都有默认值,则此构造函数也叫做拷贝构造函数,也就是说拷贝构造是⼀个特殊的构造函数。
拷贝构造的特点:
- 拷贝构造函数是构造函数的⼀个重载。
- 拷贝构造函数的第⼀个参数必须是类类型对象的引用,使用传值方式编译器直接报错,因为语法逻辑上会引发无穷递归调用。 拷贝构造函数也可以多个参数,但是第⼀个参数必须是类类型对象的引用,后面的参数必须有缺省值。
C++
规定自定义类型对象进行拷贝行为必须调用拷贝构造,所以这里自定义类型传值传参和传值返回都会调用拷贝构造完成。- 若未显式定义拷贝构造,编译器会自动生成拷贝构造函数。自动生成的拷贝构造对内置类型成员变量会完成值拷贝/浅拷贝(⼀个字节⼀个字节的拷贝),对自定义类型成员变量会调用它的拷贝构造。
我们依旧使用日期类来看一看:
#include <iostream>
using namespace std;class Date
{
public:void print(){cout << _year << "/" << _month << "/" << _day << endl;;}Date(int year, int month, int day){_year = year;_month = month;_day = day;}
private:int _year;int _month;int _day;
};int main()
{Date d1(2030, 1, 1);d1.print();Date d2(d1);d2.print();return 0;
}
这里我定义了一个日期类,然后调用构造函数初始化了d1
,这里我并没有写拷贝构造函数,但是我却使用了Date d2(d1);
,这里程序就会自动生成拷贝构造函数进行浅拷贝,我们运行看一下结果:
我们看到拷贝的效果很好,对于这种只有内置类型,没有动态开辟资源的类,编译器自动生成的拷贝构造函数就可以满足要求了,那我们还是实现一下日期类的拷贝构造函数。
拷贝构造函数:
Date(const Date& d)
{_year = d._year;_month = d._month;_day = d._day;
}
正常运行依旧是没有问题的,这里假如我们的第一个参数不写引用,这里就会出问题:
因为它在逻辑上会引发无穷递归调用:
了解了日期类的拷贝构造函数,由于日期类中没有指向动态申请的资源,而栈中我们动态申请了一个数组,我们再来看一下栈的:
#include <iostream>
using namespace std;class Stack
{
public:Stack(int n = 4){//cout << "Stack(int n = 4)" << endl;_a = (int*)malloc(sizeof(int) * n);_capacity = n;_top = 0;}void Push(const int& x){//扩容..._a[_top++] = x;}void Print(){for (int i = 0;i < _top;i++){cout << _a[i] << " ";}cout << endl;}~Stack(){cout << "~Stack()" << endl;free(_a);_capacity = 0;_top = 0;}
private:int* _a;int _capacity;int _top;
};int main()
{Stack d1;d1.Push(1);d1.Push(2);d1.Print();Stack d2(d1);d2.Print();return 0;
}
由于我们的主要的重心放在了拷贝构造函数,所以我们就没有完善Push
函数,只是让数组中有了两个元素,从上面的代码中可以看出,我们依旧没写拷贝构造函数,那这时执行Stack d2(d1);
语句时编译器会自动生成拷贝构造函数进行浅拷贝,让我们一起调试代码,看看代码的执行情况吧:
走到return 0;
时:
这时就有人发现了,编译器可以呀,走到这里还没逝,不要着急嘛,再调试一步,编译器将万劫不复!
好了,程序被我们搞崩了,这是什么原因呢?我们知道编译器自己生成的拷贝构造函数会进行浅拷贝,也就是一个字节一个字节的拷贝,那么编译器会将d1
中动态开辟内存数组_a
的地址传给d2
中动态开辟内存数组_a
,也就是说,两个类对象中的动态数组指向的是同一块内存空间,然后我们看上图就可以发现,编译器调用了两次析构函数,调用第一次的时候没事,调用第二次的时候就有逝了,此时数组已经被free
了,指向空,再free
一次编译器不崩溃才怪。
这里不只是运行崩溃的问题,当我们修改其中一个类对象时,另一个类对象也会被修改,可谓是充满了危机。
所以面对有动态内存储存资源的不能靠编译器自动生成的拷贝构造函数,因为编译器也不知道你的类中到底封装了什么东西,它猜不透你的心思,这时候就需要我们自己实现了。
拷贝构造函数:
Stack(const Stack& d)
{cout << "Stack(const Stack& d)" << endl;_a = (int*)malloc(sizeof(int) * d._capacity);if (_a == nullptr){perror("malloc fail!");return;}memcpy(_a, d._a, sizeof(int) * d._top);_capacity = d._capacity;_top = d._top;
}
再次运行代码:
这下就没有问题了。
- 这里还有⼀个小技巧,如果⼀个类显示实现了析构并释放资源,那么它就需要显示写拷贝构造,否则就不需要。
- 传值返回会产生⼀个临时对象调用拷贝构造函数,传值引用返回,返回的是返回对象的别名(引用),没有产生拷贝。传引用返回可以减少拷贝,但是⼀定要确保返回对象在当前函数结束后还在,才能用引用返回。
总结:
以上就是本期博客分享的全部内容啦!如果觉得文章还不错的话可以三连支持一下,你的支持就是我前进最大的动力!
技术的探索永无止境! 道阻且长,行则将至!后续我会给大家带来更多优质博客内容,欢迎关注我的CSDN账号,我们一同成长!
(~ ̄▽ ̄)~
相关文章:
【C++】类和对象【中上】
目录 一、类与对象1、构造函数2、析构函数3、拷贝构造函数 个人主页<—请点击 C专栏<—请点击 一、类与对象 默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。⼀个类,我们不写的情况下编译器会默认生成以下6个默…...
概率论与统计(不确定性分析)主要应用在什么方面?涉及到具体知识是什么?
用户问的是概率论与统计(不确定性分析)的主要应用方面,涉及的具体知识以及具体公式。首先,我需要确定概率论与统计在哪些领域有应用,比如工程、金融、医学、数据科学等等。然后,具体知识部分应该包括概率论…...
java面向对象编程【高级篇】之多态
目录 🚀前言🤔什么是多态?🌟多态的优缺点💯优点💯缺点 🌟类型转换💯自动类型转换💯强制类型转换 🚀前言 大家好!我是 EnigmaCoder。 本文介绍java…...
低压电工常见知识点
一.工厂用电 1.工厂一般有电源380V和220V。 三相:黄绿红 蓝 双色 助记符:王力宏 分别对应第一相(R),第二相(S),第三相(T),零线(N),地线(PE) 单相:红 黑 对应火线(L) 零线(N) 左零右火 二.人体安全电压是36V 三.变压器的讲解 变压器的符号…...
【Android】硬件合成器 HWC
硬件合成器(HWC) 深度解析 一、HWC 基本概念 硬件合成器(Hardware Composer, HWC)是Android显示系统的核心组件,负责高效管理图形层的合成与显示。作为SurfaceFlinger的关键模块,HWC通过硬件加速实现图层合成,显著提升性能并降低功耗。 二…...
【Android】dialogX对话框框架
文章目录 DialogX一、引入二、基础对话框 MessageDialog 和 输入对话框 InputDialog2.1.0 显示一个简单对话框2.1.1 构造对话框2.1.2 按钮点击回调2.2 输入对话框按钮点击回调2.3自定义布局2.4自定义进入和关闭动画 三、等待框WaitDialog和提示框TipDialog3.1 等待框3.2 提示框…...
解决 Elasticsearch 启动错误:failed to obtain node locks
1.遇到的问题: 在使用 Elasticsearch 时,可能会遇到以下错误: java.lang.IllegalStateException: failed to obtain node locks, tried [[path_to_data]] with lock id [0]; maybe these locations are not writable or multiple nodes were…...
DeepSeek:重构人类文明的智能引擎
一、技术革命:从通用智能到认知跃迁 1.1 架构创新:混合专家系统的突破 DeepSeek的混合专家(MoE)架构实现了对传统Transformer的颠覆性革新。其256个专家模块通过动态路由算法,在处理文本、图像、代码等多模态数据时&…...
(云计算HCIP)HCIP全笔记(九)本篇介绍操作系统基础,内容包含:操作系统组成、分类和定义,Linux的特性结构和Linux版本分类
1. 操作系统基础 1.1 操作系统的定义 操作系统(Operating System,简称OS),是管理和控制计算机硬件与软件资源的计算机程序(系统软件)。 1.2 操作系统的组成 通常站在用户角度,操作系统由内核和…...
Nginx的默认主配置文件 “/etc/nginx/nginx.conf“ 解读
安装Nginx后的默认主配置文件 “/etc/nginx/nginx.conf” 解读 详见如下配置及注释: # 指定 Nginx 工作进程运行的用户和用户组。这里指定以www - data用户来运行 Nginx 工作进程。 # 在基于 Debian 和 Ubuntu 的系统中,www-data 用户是默认存在的&…...
【AI模型学习】GPT——从v1到v3
文章目录 GPT-1GPT vs BERTGPT-2GPT-3Ai代码 GPT-1 GPT-1(Generative Pretrained Transformer 1)是 OpenAI 在2018年发布的第一个大规模预训练生成模型。它开创了基于 Transformer 的 预训练-微调 (pretraining-finetuning) 框架,在自然语言…...
用Function Calling让GPT查询数据库(含示例)
在本文中,我们通过一个简单的示例,介绍了 GPT模型结合Function Calling技术查询数据库 的基本流程。 Function Calling 是OpenAI推出的一项功能,允许大模型根据用户提问,自动生成函数调用指令,并由程序端实际执行外部操…...
DHCP 服务器运行流程图
以常见的 DHCP v4 为例,其完整流程如下: 一、客户端请求 IP 地址阶段 DHCPDiscover:客户端启动后,会以广播的形式发送 DHCPDiscover 报文,目的是在网络中寻找可用的 DHCP 服务器。该报文中包含客户端的 MAC 地址等信息,以便服务器能够识别客户端。DHCPOffer:网络中的 D…...
3. 使用idea将一个git分支的部分提交记录合并到另一个git分支
目录 1. 需求: 2. 操作步骤: (1)步骤一:idea切换项目分支到test上 (2)步骤二:在log窗口筛选出dev分支的提交记录 (3)步骤三:选中需要合并的记…...
GAEA情感坐标的技术架构与系统集成
为构建 AI 情感数据层,GAEA 整合了DePIN 网络、GODHOOD ID和情感坐标系三大核心组件,有效安全地整合用户数据,确保数据处理透明、高效、去中心化。架构如下: DePIN 网络:该去中心化基础设施为安全的数据传输和存储提供…...
04.通过OpenAPI-Swagger规范让Dify玩转Agent
dify安装 cd dify cd docker cp .env.example .env docker compose up -d准备自定义工具 我自建的PowerDNS,它的swagger如下: https://github.com/PowerDNS/pdns/blob/master/docs/http-api/swagger/authoritative-api-swagger.yaml 但需要加上&#x…...
idea软件配置移动到D盘
默认idea的配置在c盘,我现在软件配置已经15G了_(ཀ」 ∠)__ 。 需要关闭idea 移动软件 若是免安装版的直接移动本地软件目录就行了, 安装版的可以使用c盘搬家软件迁移。 移动配置本地文件 原位置: C:\Users\用户\AppData\Local\JetBrains…...
本安型交换机 + TSN:煤矿智能化的关键拼图
第二十三届太原煤炭(能源)工业技术与装备展览会于4月24日在潇河国际会展中心圆满落幕。作为矿山通信领域的创新企业,光路科技(Fiberroad)携多款核心产品集中亮相,涵盖万兆TSN矿用交换机、全千兆多光电融合交…...
基于SpringBoot+PostgreSQL+ROS Java库机器人数据可视化管理系统
以下是系统设计的详细方案: 1. 系统架构 ----------------- ------------------------ --------------------- -------------------- | 用户浏览器 | ---->| 前端应用 (SPA) | ---> | Spring Boot 后端 | ---> | ROS…...
机器学习算法-支持向量机SVM
支持向量机-python实现 由于本菜鸟目前还没有学习到软间隔和核函数的处理,so,先分享的硬间隔不带核函数,也就是不涉及非线性可分转化成线性可分的逻辑,后续如果学的懂,就在本篇文章的代码中继续拓展核函数等。 先来看…...
【仿Mudou库one thread per loop式并发服务器实现】服务器边缘测试+性能测试
服务器边缘测试性能测试 1. 长连接连续请求测试2. 超时连接释放测试13. 超时连接释放测试24. 超时连接释放测试35. 数据中多条请求处理测试6. PUT大文件上传测试7. 服务器性能测试 #include "httpserver.hpp" #define WWWROOT "./wwwroot"std::string Requ…...
【Spring Boot】Maven中引入 springboot 相关依赖的方式
Maven中引入 springboot 相关依赖的方式 1. 不使用版本管理(不推荐) 如果项目中没有统一版本管理,那么每个依赖都必须显式声明 <version>。 示例: <dependency><groupId>org.springframework.boot</group…...
SpringCloud核心组件Eureka菜鸟教程
关于Spring Cloud Eureka的核心概念 Eureka 是 Netflix 开源的一款基于 REST 的服务发现工具,主要用于中间层服务器的云端负载均衡。它通过维护一个服务注册表来实现服务之间的通信1。在 Spring Cloud 中,Eureka 提供了一个高可用的服务注册与发现机制&a…...
DuckDB:现代数据分析的“SQLite“内核革命
在数据工程、数据科学快速演进的今天,一个新的名字正在快速蹿红:DuckDB。 有人称它是数据分析领域的SQLite,也有人称它为下一代轻量级OLAP引擎。 无论哪种称呼,都离不开一个事实: DuckDB 重新定义了小型数据仓库和本地…...
【计算机网络分类全解析】从局域网到广域网的工程实践
目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现案例1:局域网IP扫描案例2:VLAN配置 运行结果验证 三、性能对比测试方法论量…...
Spark 技术体系深度总结
一、核心技术架构 1. 分布式计算模型 Spark基于弹性分布式数据集(RDD,Resilient Distributed Dataset)构建核心抽象,通过分区(Partition)实现数据分布式存储,每个分区可独立进行并行计算。RDD…...
金融数据分析(Python)个人学习笔记(13):自然语言处理
一、导入库和函数 pip install wordcloud pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jieba pip install gensimimport pandas as pd import numpy as np import jieba二、载入新闻数据 sinanews pd.read_csv(my_sinanews2.csv,encodinggbk) sinanews结果&a…...
ReACT Agent 实战
1. Agent 概述 关于到底什么是 Agent,目前业界并没有一个统一的定义,比如 OpenAI 倾向于将 Agent 看作是大模型能力的延伸,而 LangChain 则侧重于 Agent 是 workflow 的编排。我们没必要去纠结定义,可以简单理解 Agent 并不是某一…...
【JavaScript】关系运算符--非数值类型、Unicode编码表
1、关系运算符--非数值类型 对于非数值进行比较时,会将其转换为数字然后再比较。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,…...
【Pandas】pandas DataFrame rtruediv
Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于执行 DataFrame 与另一个对象(如 DataFrame、Series 或标量)的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于执行 DataFrame 与另一个对象&…...
重构数字信任基石:Java 24 网络安全特性的全维度革新与未来防御体系构建
引言:从技术迭代到安全范式的根本性跃迁 在量子计算威胁渐近、分布式系统架构复杂化、数据资产价值指数级增长的 2025 年,Java 平台迎来了自 Java 1.0 以来最具革命性的安全架构升级 ——Java 24 版本。这不仅仅是一次常规的特性更新,而是通…...
HTML倒数
前言 假设您需要一个网页打开后,自动间隔 N 秒进行一次自动刷新,且不依赖 js ,那么本文可以帮助到您,以最简单的方式实现需求。 实现代码 TIPS:借助 <meta http-equiv"refresh" content"X"&g…...
【C++】类和对象(上)
文章目录 上文链接一、类(class)1. 类的定义2. 类与结构体3. 访问限定符4. 类域 二、对象1. 实例化2. 对象大小 三、this 指针1. 什么是 this 指针2. 小练习 上文链接 【C】入门基础知识(下) 一、类(class)…...
Transformer四模型回归打包(内含NRBO-Transformer-GRU、Transformer-GRU、Transformer、GRU模型)
Transformer四模型回归打包(内含NRBO-Transformer-GRU、Transformer-GRU、Transformer、GRU模型) 目录 Transformer四模型回归打包(内含NRBO-Transformer-GRU、Transformer-GRU、Transformer、GRU模型)预测效果基本介绍程序设计参…...
多级缓存入门:Caffeine、Lua、OpenResty、Canal
之前写过——Google Guava Cache简介 本文系统学习一下多级缓存 目录 0.什么是多级缓存商品查询业务案例导入1.JVM进程缓存初识Caffeine实现JVM进程缓存2.Lua语法入门HelloWorld数据类型、变量和循环函数、条件控制3.Nginx业务编码实现多级缓存安装OpenRestyOpenResty快速入门…...
在AWS Glue中实现缓慢变化维度(SCD)的三种类型
根据缓慢变化维度(SCD)的三种核心类型(类型1、类型2、类型3),以下是基于AWS Glue的实现设计、步骤及测试用例: 一、AWS Glue实现SCD的设计与步骤 1. SCD类型1(覆盖旧值) 设计目标&…...
业务校验工具包-validate-utils介绍
validate-utils介绍 1. 概述 validate-utils是一个基于Hibernate Validator的轻量级校验框架,旨在简化和增强Java应用程序中的数据校验工作。该工具包提供了一系列常见的校验场景,帮助开发人员快速实现数据验证,提高代码的可维护性和可靠性。 2. 功能特性 2.1 集合数据量…...
参数规模:衡量大语言模型体量的标尺
大语言模型的体量差异通过参数数量呈现。业界标杆如GPT-3拥有1750亿参数,Grok-1更达到3140亿级别,而Llama系列则提供70亿至700亿参数的轻量化选择。这里的"70B"并非指训练数据量,而是模型内部结构的复杂度指标——每个参数如同微型…...
JS 中call、apply 和 bind使用方法和场景
call 方法 核心特性 立即执行函数,并显式指定 this 值和逐个传递参数。语法:func.call(thisArg, arg1, arg2, …) 使用场景 借用其他对象的方法 const person { name: "Alice" }; function greet(greeting) {console.log(${greeting}, ${t…...
ZeroGrasp:零样本形状重建助力机器人抓取
25年4月来自CMU、TRI 和 丰田子公司 Woven 的论文“ZeroGrasp: Zero-Shot Shape Reconstruction Enabled Robotic Grasping”。 机器人抓取是具身系统的核心能力。许多方法直接基于部分信息输出抓取结果,而没有对场景的几何形状进行建模,导致运动效果不…...
第2讲、Tensor高级操作与自动求导详解
1. 前言 在深度学习模型中,Tensor是最基本的运算单元。本文将深入探讨PyTorch中两个核心概念: Tensor的广播机制(Broadcasting)**自动求导(Autograd)**机制 这些知识点不仅让你更加灵活地操作数据&#…...
(MySQL)表的操作
目录 表的创建 语法 创建表的案例 查看表的结构 修改表的操作 修改表名 编辑 添加一个字段(列) 修改一个字段的类型 修改字段名 删除字段名(删除列) 删除指定的表 表的插入数据 数据库的备份和恢复 我们来学习表的操作 表的创建 语法 CREATE TABLE [if not ex…...
函数的使用
函数绑定 fn.call(obj, param1, param2) fn.apply(obj, [param1, param2]) fn.bind(obj, param1, param2)()相同点: 都是借用别人(fn)的方法,替换其中的this(第一个参数)call和apply的不同点:a…...
LLM应用于自动驾驶方向相关论文整理(大模型在自动驾驶方向的相关研究)
1、《HILM-D: Towards High-Resolution Understanding in Multimodal Large Language Models for Autonomous Driving》 2023年9月发表的大模型做自动驾驶的论文,来自香港科技大学和人华为诺亚实验室(代码开源)。 论文简介: 本文…...
Spring MVC深度解析:从原理到实战
文章目录 一、Spring MVC概述1.1 MVC设计模式1.2 Spring MVC特点 二、Spring MVC核心组件2.1 架构流程图解2.2 核心组件说明 三、环境搭建与配置3.1 Maven依赖3.2 传统XML配置 vs JavaConfig 四、控制器开发实践4.1 基础控制器示例4.2 请求映射注解 五、数据处理与绑定5.1 表单…...
Spark学习全总结
基础概念: Spark 是一个快速、通用的大数据处理引擎,支持多种计算模式,如批处理、流处理、交互式查询和机器学习等。 特点: 速度快:基于内存计算,能将数据缓存在内存中,避免频繁读写磁盘,大幅…...
pytorch写张量pt文件,libtorch读张量pt文件
直接在pytorch中,用torch.save保存的张量,可能因格式差异无法在C中加载。 以下是一个最简单的例子,展示如何在 Pytorch中保存张量到 TorchScript 模块,并在 C 中使用 LibTorch 加载。 Python 代码 (save_tensor.py) import torc…...
关于Android Studio的Gradle各项配置2
好的!你提到的这些文件是 Gradle 构建系统 和 Android 项目 中非常重要的一部分,它们各自有不同的作用,涉及项目的构建配置、Gradle 环境、系统配置等方面。接下来我会为你详细解释每个文件的作用,并提供具体的例子和注释。 1. gr…...
Android Studio中创建第一个Flutter项目
一、Flutter环境验证 创建Flutter项目之前需要验证是否有Flutter环境,如没有Flutter 环境,请参考配置Flutter开发环境 1.1、flutter doctor 验证通过会有以下提示 [√] Flutter (Channel stable, 3.29.3, on Microsoft Windows [版本 10.0.19045.573…...
Linux的例行性工作(crontab)
crontab服务 at 命令是在指定的时间只能执行一次任务, crontab 命令可以循环重复的执行定时任务,与 Windows 中的计划任务有些类似 crond 是 Linux 下用来周期地执行某种任务或等待处理某些事件的一个守护进程,在安装完成操 作系统后,默认会安装 crond …...