当前位置: 首页 > news >正文

C++:结构体和类

在之前的博客中已经讲过了C语言中的结构体概念了,重复的内容在这儿就不赘述了。C++中的结构体在C语言的基础上还有些补充,在这里说明一下,顺便简单地讲一下类的概念。

一、成员函数

结构体类型声明的关键字是 struct ,在C++中结构体类型声明的基本语法如下:
struct tag
{成员变量列表; //成员变量可以有1个,也可以有多个成员函数列表; //成员函数可以有,也可以没有
} 结构体变量列表; //在声明结构体类型的同时,创建结构体变量,可以有多个,中间使⽤逗号隔开

我们可以发现C++中的结构体和C语言结构体的有一个比较大的差异就是:C++中的结构体中除了有成员变量之外,还可以包含成员函数。下面先概要地介绍一下成员函数:

(1)C++的结构体会有一些默认的成员函数,比如:构造函数、析构函数等,是编译器默认生成的,如果觉得不合适,也是可以自己显示的定义这些函数,这些函数都是自动被调用,不需要手动调用。

(2)除了默认的成员函数之外,我们可以自己定义一些成员函数,这些成员函数可以有,也可以没有,完全根据的实际的需要来添加就可以。

(3)这些成员函数可以直接访问成员变量。

(4)成员函数的调用也使用 . 操作符。
1. 构造函数
构造函数是结构中默认的成员函数之一,构造函数的主要的任务是初始化结构体变量。写了构造函
数,就不需要再写其他成员函数来初始化结构体(类)的成员,而且构造函数是在结构变量创建的时候,编译器自动被调用的。
构造函数的特征如下:
(1)函数名与结构体(类)名相同。
(2)无返回值。
(3)构造函数可以重载。
(4)若未显式定义构造函数,系统会自动生成默认的构造函数。
2. 析构函数
析构函数是用来完成结构体变量中资源的清理工作,也是结构体中默认的成员函数之一。析构函数在结构体变量销毁的时候,被自动调用的。
析构函数的特征如下:
(1)析构函数名是在结构体(类)名前加上字符 ~
(2)无参数无返回值类型。
(3)一个类只能有一个析构函数。若未显式定义析构函数,系统会自动生成默认的析构函数。注意:析构函数不能重载。
#include <iostream>
using namespace std;
struct Stu
{//成员变量string name;int chinese;int math;int total; //构造函数Stu(){cout << "调用构造函数" << endl;name = "小明";chinese = 99;math = 95;total = math + chinese;}//析构函数~Stu(){cout << "调用析构函数" << endl;//对于当前这个类的对象没有啥资源清理}
};
int main()
{struct Stu s;return 0;
}

运行结果打印了调用构造函数和调用析构函数这两句话,这也验证了构造函数和析构函数是会被自动调用的。

3.自定义函数
创建结构体中的自定义函数和我们平时创建自定义函数的方式是一样的,只是在使用的时候需要使用 . 操作符。
#include <iostream>
using namespace std;
struct Stu
{//成员变量string name;int chinese;int math;int total;//构造函数Stu(){name = "小明";chinese = 99;math = 95;total = math + chinese;}void print_stu() //打印{cout << "名字:" << name << endl;cout << "语文:" << chinese << endl;cout << "数学:" << math << endl;cout << "总分:" << total << endl;}
};
int main()
{struct Stu s;s.print_stu();return 0;
}

二、运算符重载

我们在C++中打印数据的时候,习惯了直接使用  cout 来直接打印数据的。比如:
int n = 100;
float f = 3.14f;
cout << n << endl;
cout << f << endl;
那针对 struct Stu 类型的变量能不能直接使用  cout 来打印呢?当我们直接使用时会发现这样是行不通的。 那怎么解决呢?其实在C++中要针对自定义类型的变量,想使用  cout << 来输出变量的内容, 就得对 << 这个输出运算符进行重载。具体代码如下:
#include <iostream>
using namespace std;
struct Stu
{//成员变量string name;int chinese;int math;int total;
};
//重载输出运算符
ostream& operator<<(ostream& os, const Stu & s)
{os << "名字: " << s.name << endl;os << "语文: " << s.chinese << endl;os << "数学: " << s.math << endl;os << "总分: " << s.total << endl;return os;
}
int main()
{struct Stu s = {"张三", 90, 80, 170};cout << s << endl; return 0;
}

ostream&:表示该函数返回一个指向 ostream 对象的引用。ostream 是C++中用于输出流的标准库类,例如 cout 就是 ostream 类型的一个实例。
operator<<:这是重载运算符的语法,允许你定义当使用 `<<` 运算符时应该执行的操作。这里我们重载了 << 运算符,使其能够接受 ostream 和 Stu 类型的参数,并按特定格式输出对象的信息。
(ostream& os, const Stu & s):这个函数接受两个参数,第一个是 ostream 类型的引用 os,代表输出流(如 cout),第二个是一个常量引用 const Stu & s,即要输出的 Stu 类型对象。

接下来就简单地讲集几种运算符重载。

1.加号运算符重载

#include <iostream>
using namespace std;
struct Stu
{int a;float b;Stu operator+(Stu s){Stu s3;s3.a=a+s.a;return s3;}
}s1,s2;
int main()
{s1.a=1;s2.a=2;Stu s3=s1+s2;cout << s3.a;return 0;
}

在这段代码中,Stu operator+(Stu s) 是一个成员函数,用于重载加法运算符(+),以便两个 Stu 类型的对象可以相加。它接受一个 Stu 类型的参数 s 并返回一个 Stu 类型的结果。由于这是一个成员函数,它隐式地接收调用它的对象作为第一个参数。这个运算符重载为s1.operator+(s2),可以简化为s1+s2。当然我们也可以使用全局函数的方式来实现运算符的重载。

#include <iostream>
using namespace std;
struct Stu
{int a;float b;
}s1,s2;
Stu operator+(Stu s1,Stu s2)
{Stu s3;s3.a=s1.a+s2.a;return s3;
}
int main()
{s1.a=1;s2.a=2;Stu s3=s1+s2;cout << s3.a;return 0;
}

这个运算符重载为operator+(s1,s2),可以简化为s1+s2。

2.左移运算符重载

最上面举的cout的例子就是左移运算符重载,是采取全局函数的方式来实现的。在这里顺便一提,在这里如果我们使用成员函数的方式是实现不了的,在下面代码中我们可以看出,虽然能够重载这个运算符,但是实现的效果为s << cout ,并不是我们想要的结果。

#include <iostream>
using namespace std;
struct Stu
{//成员变量string name;int chinese;int math;int total;//重载输出运算符
ostream& operator<<(ostream& os)
{os << "名字: " << name << endl;os << "语文: " << chinese << endl;os << "数学: " << math << endl;os << "总分: " << total << endl;return os;
}
};
int main()
{struct Stu s = {"张三", 90, 80, 170};s << cout; return 0;
}

3.递增运算符重载

#include <iostream>
using namespace std;
struct Stu
{int a;//前置++重载 Stu& operator++(){a++;return *this;}//后置++重载Stu operator++(int){Stu s=*this;a++;return s;}
}s;//重载输出运算符
ostream& operator<<(ostream& os,const Stu& s)
{os << s.a << endl;return os;
}
void test1()
{cout << ++s;
}
void test2()
{cout << s++;
} 
int main()
{s.a=1;test1();s.a=1;test2();return 0;	
} 

在自增运算符的重载中许多思想是和之前一样的,区别在于前置运算符重载作为成员函数时没有额外参数,后置运算符重载作为成员函数时需要一个额外的、类型为int的占位参数。这个参数通常不使用,只是用来与前置运算符区分开来。还有一个注意的点是,在前置++重载时,我们把返回值的类型设为了结构体的引用,这是因为当我们对内置数据连续自增操作是对该数据连续自增的,说起来很奇怪,其实就是进行一次自增操作,变量就自增一次。但如果在这里我们不使用引用,就会返回一个结构体类型的临时变量,如果在进行自增操作,对于原来的结构体变量是没有影响的。而后置++是不会进行连续操作的,所以我们不需要考虑。

4.关系运算符重载

#include <iostream>
#include <string>
using namespace std;
struct Stu
{string name;int age;bool operator==(Stu& s){if(this->name==s.name&&this->age==s.age)return true;elsereturn false;}
};
int main()
{Stu s1={"Tom",12};Stu s2={"Tom",12};if(s1==s2)cout << "same" << endl;return 0;
}

三、结构体排序 - sort

说到排序,我们之前讲过冒泡排序,我们也可以写一个冒泡排序函数来排序一组结构体数据,但是这里给大家介绍一个 C++ 的 STL 中的库函数 sort ,可以直接用来排序数据,只要涉及到数据的排序,又没有明确要求自己实现排序算法的时候,就可以直接使用sort函数。
1.sort 函数介绍
函数原型如下:
//版本1
template <class RandomAccessIterator>
void sort (RandomAccessIterator first, RandomAccessIterator last);
//void sort(开始位置,结束位置);
//first:指向要排序范围的第⼀个元素的迭代器或者指针。
//last:指向要排序范围的最后⼀个元素之后位置的迭代器或者指针。
//版本2
template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare 
comp);
//void sort(开始位置,结束位置,⾃定义排序函数);
//first:指向要排序范围的第⼀个元素的迭代器或者指针。
//last:指向要排序范围的最后⼀个元素之后位置的迭代器或者指针。
//comp:是⼀个⽐较函数或者函数对象
//这⾥开始位置和结束位置,可以是指针,也可以是迭代器
//⾃定义排序函数 可以是函数,也可以是仿函数
sort 函数需要包含的头文件 <algorithm>。在默认情况下 sort 函数,按升序对给定范围 [first,last)中的元素进行排序。
2.排序内置类型数据
对数组进行排序:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{int arr[] = { 4,5,6,9,7,1,2,8,5,4,2 };int size = sizeof(arr) / sizeof(arr[0]);//起始位置和结束位置传的是地址sort(arr, arr + size);for (int i = 0; i < size; i++){cout << arr[i] << " ";}cout << endl;return 0;
}
默认排序结果是升序的。
对字符串中的字符进行排序:
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main()
{string s("defxxxabccba");sort(s.begin(), s.end());cout << s << endl;return 0;
}
这里是对字符串中字符的顺序进行排序,是按照字符的ASCII值进行排序的。默认排序的结果依然是升序。
3.自定义排序
sort 在默认的情况下是按照升序排序,如何按照降序排序呢?如果是结构体类型数据进行排序呢?
怎么办?我们可以使用自定义排序方式:
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare 
comp);
sort 的第三个参数是一个可选的自定义比较函数(或函数对象),用于指定排序的规则。如果不提
供这个参数, std::sort 默认会使用小于运算符 ( < ) 来比较元素,并按照升序排序。这个比较函数,接受两个参数,并返回一个布尔值。如果第一个参数应该排在第二个参数之前,则返回 true;否则返回 false。
接下来试试看,comp 表示可以自定义一个排序方法,使用方法如下:
#include <iostream>
#include <algorithm>
using namespace std;
//自定义一个比较函数,这个⽐较函数能够⽐较被排序数据的2个元素大小
//函数返回bool类型的值
bool compare(int x, int y) 
{return x > y;//排降序
}
int main()
{int arr[] = { 4,5,6,9,7,1,2,8,5,4,2 };int size = sizeof(arr) / sizeof(arr[0]);//将函数名作为第三个参数传⼊sort函数中sort(arr, arr + size, compare);for (int i = 0; i < size; i++){cout << arr[i] << " ";}cout << endl;return 0;
}

当然第三个参数还可以使用结构体中重载()运算符-仿函数。

#include <iostream>
#include<algorithm>
using namespace std;
//仿函数⽅式 - 仿函数也叫函数对象
struct Cmp
{bool operator()(int x, int y){return x > y;//排降序}
}cmp;
int main()
{int arr[] = { 4,5,6,9,7,1,2,8,5,4,2 };int size = sizeof(arr) / sizeof(arr[0]);//将结构体对象作为第三个参数传⼊sort函数中sort(arr, arr + size, cmp);for (int i = 0; i < size; i++){cout << arr[i] << " ";}cout << endl;return 0;
}

四、类

C++中为了更好的实现面向对象,更喜欢使用  class (类)来替换 struct (结构体)。你可以简单粗暴
的理解为 class struct 是一回事,但是其实本上还是有区别的。
1. 类定义
类的关键字是 class ,类中主要也是由两部分组成,分别为成员变量和成员函数。形式如下:
class tag
{
public:成员变量列表;成员函数列表;
}; // ⼀定要注意后⾯的分号
class 是用来定义类类型的关键字,在类中可以定义成员函数和成员变量。
public 是类成员权限访问限定符,标志类中的成员可以公开访问及调用。
在这里我们就能发现一个与结构体不同的地方,结构体中没有public。这是为什么呢? 原因是:结构体的成员变量和成员函数,默认就是公开的,而 class 中的成员变量和成员 函数默认是私有的( private )。
class Stu
{
public: void init_stu() {name= "⼩明";chinese = 0;math = 0;total = 0;}string name; //名字int chinese; //语⽂成绩int math; //数学成绩int total; //总成绩
};
2.类的使用
(1) 创建类对象
int main()
{Stu s1; //创建类对象s1Stu s2; //创建类对象s2return 0;
}

(2)调用类对象成员

像结构体一样,通过操作符( . )即可对类对象的成员进行访问。
#include <iostream>
using namespace std;
int main()
{//创建类对象Stu s1;//调⽤成员变量s1.name = "张三";s1.chinese = 90;s1.math = 98;s1.total = s1.chinese + s1.math;Stu s2;//调⽤成员函数s2.init_stu();return 0;
}

3.访问权限控制

访问限定符是C++语言中的关键字,用于指定类成员的访问权限。
访问限定符主要有三个:
public :成员被声明为 public 后,可以被该类的任何方法访问,包括在类的外部。
protected :成员被声明为 protected 后,可以被该类访问。
private :成员被声明为 private 后,只能被该类的成员函数访问。
#include <iostream>
using namespace std;class Stu
{
public: //将成员函数设置为公有属性void init_stu() {name= "⼩明";chinese = 0;math = 0;total = 0;}
private: //将成员变量设置为私有属性string name; //名字int chinese; //语⽂成绩int math; //数学成绩int total; //总成绩
};
int main()
{Stu stu;stu.init_stu(); //访问公有成员函数cout << stu.name << endl; //访问私有成员变量,编译器报错return 0;
}
通过运行结果可见,类外可直接访问设置为公有的成员,而不可以直接访问私有的成员。 习惯上,外部可访问的成员函数通常设置为公有属性( public ),而为了提高成员变量的 访问安全性,通常将成员变量设置为私有属性( private ),即只有类内部可以访问。

4.结构体和类的区别

C++中 struct class 的区别是什么?
C++兼容了C语言,所以C++中 struct 既可以当成结构体使用,还可以用来定义类,和 class 定义
类是一样的。区别是 struct 定义的类默认访问权限是 public class 定义的类默认访问权限是 private
类的定义既可以使用  struct ,也可以使用  class。C++更常用 class 关键词来定义类,因此在选用  class 的时候需要加上访问限定符 public 才可以在类外调用类的成员函数和成员变量。

相关文章:

C++:结构体和类

在之前的博客中已经讲过了C语言中的结构体概念了&#xff0c;重复的内容在这儿就不赘述了。C中的结构体在C语言的基础上还有些补充&#xff0c;在这里说明一下&#xff0c;顺便简单地讲一下类的概念。 一、成员函数 结构体类型声明的关键字是 struct &#xff0c;在C中结构体…...

初级数据结构:栈和队列

目录 一、栈 (一)、栈的定义 (二)、栈的功能 (三)、栈的实现 1.栈的初始化 2.动态扩容 3.压栈操作 4.出栈操作 5.获取栈顶元素 6.获取栈顶元素的有效个数 7.检查栈是否为空 8.栈的销毁 9.完整代码 二、队列 (一)、队列的定义 (二)、队列的功能 (三&#xff09…...

携程Java开发面试题及参考答案 (200道-下)

insert 一行数据的时候加的是什么锁?为什么? 在 MySQL 中,当执行 INSERT 操作插入一行数据时,加锁的情况会因存储引擎和具体的事务隔离级别而有所不同。一般来说,在 InnoDB 存储引擎下,INSERT 操作加的是行级排他锁(Row Exclusive Lock),以下详细说明原因。 行级排他…...

Python从0到100(八十六):神经网络-ShuffleNet通道混合轻量级网络的深入介绍

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…...

98,【6】 buuctf web [ISITDTU 2019]EasyPHP

进入靶场 代码 <?php // 高亮显示当前 PHP 文件的源代码&#xff0c;通常用于调试或展示代码&#xff0c;方便用户查看代码逻辑 highlight_file(__FILE__);// 从 GET 请求中获取名为 _ 的参数值&#xff0c;并赋值给变量 $_ // 符号用于抑制可能出现的错误信息&#xff…...

54【ip+端口+根目录通信】

上节课讲到&#xff0c;根目录起到定位作用&#xff0c;比如我们搭建一个php网站后&#xff0c;注册系统是由根目录的register.php文件执行&#xff0c;那么我们给这个根目录绑定域名https://127.0.0.1&#xff0c;当我们浏览器访问https://127.0.0.1/register.php时&#xff0…...

计算机网络 应用层 笔记 (电子邮件系统,SMTP,POP3,MIME,IMAP,万维网,HTTP,html)

电子邮件系统&#xff1a; SMTP协议 基本概念 工作原理 连接建立&#xff1a; 命令交互 客户端发送命令&#xff1a; 服务器响应&#xff1a; 邮件传输&#xff1a; 连接关闭&#xff1a; 主要命令 邮件发送流程 SMTP的缺点: MIME&#xff1a; POP3协议 基本概念…...

解析PHP文件路径相关常量

PHP文件路径相关常量包括以下几个常量&#xff1a; __FILE__&#xff1a;表示当前文件的绝对路径&#xff0c;包括文件名。 __DIR__&#xff1a;表示当前文件所在的目录的绝对路径&#xff0c;不包括文件名。 dirname(__FILE__)&#xff1a;等同于__DIR__&#xff0c;表示当前…...

蓝桥与力扣刷题(234 回文链表)

题目&#xff1a;给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true示例 2&#xff1a; 输入&…...

【协议详解】卫星通信5G IoT NTN SIB33-NB 信令详解

一、SIB33信令概述 在5G非地面网络&#xff08;NTN&#xff09;中&#xff0c;卫星的高速移动性和广域覆盖特性使得地面设备&#xff08;UE&#xff09;需要频繁切换卫星以维持连接。SIB32提供了UE预测当前服务的卫星覆盖信息&#xff0c;SystemInformationBlockType33&#x…...

c语言练习题【数据类型、递归、双向链表快速排序】

练习1&#xff1a;数据类型 请写出以下几个数据的数据类型 整数 a a 的地址 存放a的数组 b 存放a的地址的数组 b的地址 c的地址 指向 printf 函数的指针 d 存放 d的数组 整数 a 的类型 数据类型是 int a 的地址 数据类型是 int*&#xff08;指向 int 类型的指针&#xff09; …...

SliverAppBar的功能和用法

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了SliverGrid组件相关的内容&#xff0c;本章回中将介绍SliverAppBar组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中介绍的SliverAppBar和普通的AppBar类似&#xff0c;它们的…...

deepseek 本地化部署和小模型微调

安装ollama 因为本人gpu卡的机器系统是centos 7, 直接使用ollama会报 所以ollama使用镜像方式进行部署&#xff0c; 拉取镜像ollama/ollama 启动命令 docker run -d --privileged -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama 查看ollama 是否启动…...

Heptagon 同步语言介绍

同步语言于20世纪80年代创立&#xff0c;用于建模、设计和实现实时关键反应系统。随着被控制系统的复杂性不断增加&#xff0c;执行速度成为一个重要标准。与此同时&#xff0c;处理器在核心数量上的增长超过了速度的提升。因此&#xff0c;我们正在寻求一种并行执行方式&#…...

Golang 并发机制-5:详解syn包同步原语

并发性是现代软件开发的一个基本方面&#xff0c;Go&#xff08;也称为Golang&#xff09;为并发编程提供了一组健壮的工具。Go语言中用于管理并发性的重要包之一是“sync”包。在本文中&#xff0c;我们将概述“sync”包&#xff0c;并深入研究其最重要的同步原语之一&#xf…...

数组排序算法

数组排序算法 用C语言实现的数组排序算法。 排序算法平均时间复杂度最坏时间复杂度最好时间复杂度空间复杂度是否稳定适用场景QuickO(n log n)O(n)O(n log n)O(log n)不稳定大规模数据&#xff0c;通用排序BubbleO(n)O(n)O(n)O(1)稳定小规模数据&#xff0c;教学用途InsertO(n)…...

利用腾讯云cloud studio云端免费部署deepseek-R1

1. cloud studio 1.1 cloud studio介绍 Cloud Studio&#xff08;云端 IDE&#xff09;是基于浏览器的集成式开发环境&#xff0c;为开发者提供了一个稳定的云端工作站。支持CPU与GPU的访问。用户在使用 Cloud Studio 时无需安装&#xff0c;随时随地打开浏览器即可使用。Clo…...

Codeforces Round 1002 (Div. 2)(A-D)

题目链接&#xff1a;Dashboard - Codeforces Round 1002 (Div. 2) - Codeforces A. Milya and Two Arrays 思路 数组a中不同数的数量*数组b的&#xff0c;就是能够组成不同数的数量 代码 void solve(){int n;cin>>n;int cnt10;int cnt20;map<int,bool> mp;ma…...

半导体器件与物理篇7 微波二极管、量子效应和热电子器件

基本微波技术 微波频率&#xff1a;微波频率涵盖约从0.1GHz到3000GHz&#xff0c;相当于波长从300cm到0.01cm。 分布效应&#xff1a;电子部件在微波频率&#xff0c;与其在较低频率的工作行为不同。 输运线&#xff1a;一个由电阻、电容、电感三种等效基本电路部件所组成的…...

Hot100之图论

200岛屿数量 题目 思路解析 把访问过的格子插上棋子 思想是先污染再治理&#xff0c;我们有一个inArea&#xff08;&#xff09;函数&#xff0c;是判断是否出界了 我们先dfs&#xff08;&#xff09;放各个方向遍历&#xff0c;然后我们再把这个位置标为0 我们岛屿是连着…...

CSS 样式化表格:从基础到高级技巧

CSS 样式化表格&#xff1a;从基础到高级技巧 1. 典型的 HTML 表格结构2. 为表格添加样式2.1 间距和布局2.2 简单的排版2.3 图形和颜色2.4 斑马条纹2.5 样式化标题 3. 完整的示例代码4. 总结 在网页设计中&#xff0c;表格是展示数据的常见方式。然而&#xff0c;默认的表格样式…...

DeepSeek相关技术整理

相关介绍 2024年12月26日&#xff0c;DeepSeek V3模型发布&#xff08;用更低的训练成本&#xff0c;训练出更好的效果&#xff09;671B参数&#xff0c;激活37B。2025年1月20日&#xff0c;DeepSeek-R1模型发布&#xff08;仅需少量标注数据&#xff08;高质量长cot&#xff…...

Spring Boot框架下的单元测试

1. 什么是单元测试 1.1 基本定义 单元测试(Unit Test) 是对软件开发中最小可测单位&#xff08;例如一个方法或者一个类&#xff09;进行验证的一种测试方式。在 Java 后端的 Spring Boot 项目中&#xff0c;单元测试通常会借助 JUnit、Mockito 等框架对代码中核心逻辑进行快…...

OpenAI 实战进阶教程 - 第四节: 结合 Web 服务:构建 Flask API 网关

目标 学习将 OpenAI 接入 Web 应用&#xff0c;构建交互式 API 网关理解 Flask 框架的基本用法实现 GPT 模型的 API 集成并返回结果 内容与实操 一、环境准备 安装必要依赖&#xff1a; 打开终端或命令行&#xff0c;执行以下命令安装 Flask 和 OpenAI SDK&#xff1a; pip i…...

xss-labs靶场

xss-labs靶场 xss攻击类型 反射型xss 即攻击者将恶意脚本嵌入到url或者表单中&#xff0c;当用户访问特定的url或者提交表单时&#xff08;用户端请求时)&#xff0c;恶意脚本会执行 攻击需要用户点击恶意链接或访问包含恶意参数的url触发 存储型xss 即攻击者将恶意脚本提交…...

Eigen::Tensor使用帮助

0 引言 用python实现了某些算法之后&#xff0c;想转成C来获取更高的性能。但是python数组的操作太灵活了&#xff0c;尤其是3维、4维、5维等高维数组&#xff0c;以及它们的广播、数组坐标、切片等机制。还有numpy的pad、where等操作更是给C转换带来了更多的麻烦。 查阅了相…...

高阶开发基础——快速入门C++并发编程4

目录 使用call_once来确保调用的唯一性 先看我们的原始的单例模式 使用call_once来确保调用的唯一性 一个相似的概念是——单例模式&#xff0c;笔者找到的是stack_overflow的一个问答&#xff0c;如果不喜欢看英文&#xff0c;可以考虑看一下这个CSDN回答&#xff1a; c - H…...

C++基础day1

前言&#xff1a;谢谢阿秀&#xff0c;指路阿秀的学习笔记 一、基础语法 1.构造和析构: 类的构造函数是一种特殊的函数&#xff0c;在创建一个新的对象时调用。类的析构函数也是一种特殊的函数&#xff0c;在删除所创建的对象时调用。 构造顺序&#xff1a;父类->子类 析…...

Deepseek:网页版OR本地部署版本?

使用本地部署的 DeepSeek 还是网页版的 DeepSeek&#xff0c;取决于具体需求和使用场景。以下是两者的对比及推荐建议&#xff1a; 响应速度 网页版 DeepSeek&#xff1a;响应速度受网络状况和服务器负载影响较大。如果网络不稳定或服务器繁忙&#xff0c;可能会出现延迟甚至…...

【文件上传】

目录 一. 介绍二. 本地存储三. 阿里云OSS3.1 准备工作3.2 入门程序3.3 案例集成3.4 程序优化 \quad 一. 介绍 \quad 三要素缺一不可 \quad 二. 本地存储 \quad 解决相同命名覆盖问题 \quad 三. 阿里云OSS \quad \quad 3.1 准备工作 \quad \quad 3.2 入门程序 \quad \quad 3.3…...

股票入门知识

股票入门&#xff08;更适合中国宝宝体制&#xff09; 股市基础知识 本文介绍了股票的基础知识&#xff0c;股票的分类&#xff0c;各板块发行上市条件&#xff0c;股票代码&#xff0c;交易时间&#xff0c;交易规则&#xff0c;炒股术语&#xff0c;影响股价的因素&#xf…...

Debezium Oracle Connector SCN处理优化指南

Debezium Oracle Connector SCN处理优化指南 📌 问题场景 SCN跳跃场景: 起始SCN:15,000(含数据变更)结束SCN:1,000,000(无中间数据)默认批次大小:10,000 → 需执行985次无效查询🚀 优化方案 1. 自适应批次调整 代码位置:LogMinerStreamingChangeEventSource.j…...

2021版小程序开发5——小程序项目开发实践(1)

2021版小程序开发5——小程序项目开发实践(1) 学习笔记 2025 使用uni-app开发一个电商项目&#xff1b; Hbuidler 首选uni-app官方推荐工具&#xff1a;https://www.dcloud.io/hbuilderx.htmlhttps://dev.dcloud.net.cn/pages/app/list 微信小程序 管理后台&#xff1a;htt…...

软件测试02----用例设计方法

今天目标 1.能对穷举场景设计测试点 2.能对限定边界规则设计测试点 3.能对多条件依赖关系进行设计测试点 4.能对项目业务进行设计测试点 一、解决穷举场景 重点&#xff1a;使用等价类划分法 1.1等价类划分法 重点&#xff1a;有效等价和单个无效等价各取1个即可。 步骤&#…...

分享半导体Fab 缺陷查看系统,平替klarity defect系统

分享半导体Fab 缺陷查看系统&#xff0c;平替klarity defect系统&#xff1b;开发了半年有余。 查看Defect Map&#xff0c;Defect image&#xff0c;分析Defect size&#xff0c;defect count trend. 不用再采用klarity defect系统&#xff08;license 太贵&#xff09; 也可以…...

C语言-----数据结构从门到精通

1.数据结构基本概念 数据结构是计算机中存储、组织数据的方式&#xff0c;旨在提高数据的访问和操作效率。它是实现高效算法和程序设计的基石。 目标:通过思维导图了解数据结构的知识点,并掌握。 1.1逻辑结构 逻辑结构主要四种类型: 集合&#xff1a;结构中的数据元素之…...

存储器知识点3

1.只读存储器中内容断电后不会丢失&#xff0c;通常存储固定不变的内容&#xff0c;不需要定时刷新。 2.虚拟存储器将主存和辅存地址空间统一编址&#xff0c;其大小受到辅助存储器容量的限制。使得主存空间得到了扩充&#xff0c;需要硬件支持&#xff0c;并由操作系统调度。…...

Weevely代码分析

亲测php5和php8都无效&#xff0c;只有php7有效 ailx10 1949 次咨询 4.9 网络安全优秀回答者 互联网行业 安全攻防员 去咨询 上一次做weevely实验可以追溯到2020年&#xff0c;当时还是weevely3.7&#xff0c;现在的是weevely4 生成php网页木马依然差不多…… php菜刀we…...

leetcode解题思路分析(一百六十三)1409 - 1415 题

查询带键的排列 给定一个正整数数组 queries &#xff0c;其取值范围在 1 到 m 之间。 请你根据以下规则按顺序处理所有 queries[i]&#xff08;从 i0 到 iqueries.length-1&#xff09;&#xff1a; 首先&#xff0c;你有一个排列 P[1,2,3,…,m]。 对于当前的 i &#xff0c;找…...

【MATLAB例程】TOA和AOA混合的高精度定位程序,适用于三维、N锚点的情况

代码实现了一个基于到达角&#xff08;AOA&#xff09;和到达时间&#xff08;TOA&#xff09;混合定位的例程。该算法能够根据不同基站接收到的信号信息&#xff0c;自适应地计算目标的位置&#xff0c;适用于多个基站的场景 文章目录 主要功能代码结构运行结果程序代码 主要功…...

PyTorch框架——基于深度学习YOLOv8神经网络学生课堂行为检测识别系统

基于YOLOv8深度学习的学生课堂行为检测识别系统&#xff0c;其能识别三种学生课堂行为&#xff1a;names: [举手, 读书, 写字] 具体图片见如下&#xff1a; 第一步&#xff1a;YOLOv8介绍 YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本…...

智慧园区系统对比不同智能管理模式提升企业运营效率与安全性

内容概要 在当今竞争激烈的市场中&#xff0c;企业需要不断提高运营效率与安全性&#xff0c;以应对复杂的环境。这时&#xff0c;“智慧园区系统”应运而生&#xff0c;成为一种有效的解决方案。智能管理模式的多样性让企业在选择系统时有了更多的选择&#xff0c;而在这些模…...

读书笔记 | 《最小阻力之路》:用结构思维重塑人生愿景

一、核心理念&#xff1a;结构决定行为轨迹 橡皮筋模型&#xff1a;愿景张力的本质 书中提出&#xff1a;人类行为始终沿着"现状"与"愿景"之间的张力路径运动&#xff0c;如同橡皮筋拉伸产生的动力。 案例&#xff1a;音乐家每日练习的坚持&#xff0c;不…...

257. 二叉树的所有路径

二叉树的所有路径 已解答 简单 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,null,5] 输出&#xff1a;[“1->2->5”,“…...

Vulkan 学习(13)---- Vulkan Framebuffercommand buffer

目录 Vulkan Framebuffer创建 VkFramebufferVkFrameBuffer 创建示例 Vulkan command buffercommand buffer pool分配指令缓存池释放指令缓存池录制 command buffer提交 command buffer Vulkan Framebuffer Vulkan 帧缓冲区(FrameBuffer) 是一个容器对象(资源管理类的对象)&…...

从零开始学习安时积分法(STM32实现程序)

在STM32微控制器上实现安时积分法&#xff08;Coulomb Counting&#xff09;来估算电池的SOC&#xff08;State of Charge&#xff09;&#xff0c;需要完成以下几个步骤&#xff1a; 硬件配置&#xff1a; 使用STM32的ADC模块测量电池的电流。使用定时器模块进行时间积分。配置…...

基于Kamailio、MySQL、Redis、Gin、Vue.js的微服务架构

每个服务使用一台独立的服务器的可行部署方案&#xff0c;尤其是在高并发、高可用性要求较高的场景中。这种方案通常被称为分布式部署或微服务架构。以下是针对您的VoIP管理系统&#xff08;基于Kamailio、MySQL、Redis、Gin、Vue.js&#xff09;的详细分析和建议。 1. 分布式部…...

Unity 粒子特效在UI中使用裁剪效果

1.使用Sprite Mask 首先建立一个粒子特效在UI中显示 新建一个在场景下新建一个空物体&#xff0c;添加Sprite Mask组件&#xff0c;将其的Layer设置为UI相机渲染的UI层&#xff0c; 并将其添加到Canvas子物体中&#xff0c;调整好大小&#xff0c;并选择合适的Sprite&#xff…...

Android 开发:新的一年,新的征程

回顾 2023 年&#xff0c;Android 开发领域可谓成果斐然。这一年&#xff0c;Android 系统不断迭代&#xff0c;新技术、新工具层出不穷&#xff0c;为开发者们带来了前所未有的机遇与挑战。如今&#xff0c;我们站在新的起点&#xff0c;怀揣着对技术的热爱与追求&#xff0c;…...

手写MVVM框架-环境搭建

项目使用 webpack 进行进行构建&#xff0c;初始化步骤如下: 1.创建npm项目执行npm init 一直下一步就行 2.安装webpack、webpack-cli、webpack-dev-server&#xff0c;html-webpack-plugin npm i -D webpack webpack-cli webpack-dev-server html-webpack-plugin 3.配置webpac…...