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

c++---------数据类型

  1. 基本数据类型
    • 整数类型(Integral Types)
      • int(整型)
        • 这是最常用的整数类型,通常用于存储一般范围的整数值。在32位系统中,int类型一般占用4个字节,取值范围大约是 - 2147483648到2147483647。例如,int age = 25;用于存储人的年龄。
      • short(短整型)
        • 占用的内存空间比int小,通常为2个字节,适用于存储范围较小的整数。例如,short temperature = -10;可用于存储温度等范围相对较小的整数,其取值范围大约是 - 32768到32767。
      • long(长整型)
        • 用于存储较大范围的整数。在32位系统中,long通常占用4个字节,和int大小相同,但在64位系统中,long可能占用8个字节,取值范围更宽。例如,long population = 10000000000L;(注意后面的L后缀用于表示长整数常量)可用于存储人口数量等较大的整数值。
      • long long(长长整型)
        • 这是C++11新增的类型,一般占用8个字节,能存储更大范围的整数。例如,long long bigNumber = 9223372036854775807LL;(注意后面的LL后缀用于表示长长整数常量),其取值范围大约是 - 9223372036854775808到9223372036854775807。
      • unsigned修饰符(无符号整数类型)
        • 当在整数类型前加上unsigned时,变量只能存储非负整数,其取值范围从0开始。例如,unsigned int count = 0;用于计数等场景,unsigned int在32位系统中的取值范围是0到4294967295。
    • 浮点数类型(Floating - Point Types)
      • float(单精度浮点数)
        • 占用4个字节的内存,用于存储单精度浮点数。例如,float height = 1.75f;(注意后面的f后缀用于表示单精度浮点数常量)用于存储人的身高。float类型的有效数字位数相对较少,大约为6 - 7位。
      • double(双精度浮点数)
        • 占用8个字节的内存,能提供更高的精度,用于存储双精度浮点数。例如,double pi = 3.141592653589793;用于存储圆周率等需要高精度的数值。double类型的有效数字位数大约为15 - 16位。
      • long double(长双精度浮点数)
        • 占用的字节数和精度因编译器和系统而异,通常比double有更高的精度。例如,在一些系统中,long double可能占用10或16个字节,用于特殊的高精度计算场景。
    • 字符类型(Character Types)
      • char(字符型)
        • 用于存储单个字符,占用1个字节的内存。例如,char grade = 'A';用于存储学生成绩等级等单个字符。字符在内存中是以ASCII码(美国信息交换标准代码)或者其他字符编码(如UTF - 8)的形式存储的,在ASCII码中,字符'A'对应的十进制值是65。
      • wchar_t(宽字符型)
        • 用于存储宽字符,通常用于处理Unicode字符。其大小和编码方式取决于编译器和系统,一般占用2或4个字节。例如,wchar_t unicodeChar = L'你';(注意前面的L前缀用于表示宽字符常量)用于存储中文字符等宽字符。
  2. 复合数据类型
    • 数组(Arrays)
      • 定义和初始化:数组是一组相同类型的数据元素的集合。例如,int numbers[5];定义了一个包含5个int类型元素的数组。可以在定义时进行初始化,如int anotherNumbers[3] = {1, 2, 3};。数组的元素通过下标访问,下标从0开始,例如numbers[0]表示数组numbers的第一个元素。
      • 用途:用于存储和处理一组相关的数据。例如,存储学生的成绩int scores[30];,或者存储图像的像素颜色值等。
    • 结构体(Structures)
      • 定义和组成:结构体是一种用户自定义的数据类型,它可以包含不同类型的数据成员。例如:
      struct Student {int id;char name[20];float gpa;
      };
      
      定义了一个名为Student的结构体,包含学生的学号、姓名和平均绩点。可以通过Student student1; student1.id = 1; strcpy(student1.name, "John"); student1.gpa = 3.5;来创建和初始化结构体变量。
      • 用途:用于将多个相关的数据组合在一起,方便管理和操作。例如,在处理学生信息、员工信息等复杂的数据结构时非常有用。
    • 联合体(Unions)
      • 定义和特点:联合体是一种特殊的复合数据类型,它的所有成员共享同一块内存空间。例如:
      union Data {int i;float f;char c;
      };
      
      定义了一个名为Data的联合体。在某一时刻,联合体只能存储其中一个成员的值。例如,Data data; data.i = 10;此时内存中存储的是整数10,如果接着使用data.f = 3.14;,那么之前存储的整数10就会被覆盖,内存中存储的是浮点数3.14。
      • 用途:主要用于节省内存空间,当多个数据类型不会同时使用时,可以使用联合体。例如,在某些嵌入式系统或者对内存要求苛刻的场景中,对于一些可能是不同类型但不会同时出现的数据可以使用联合体来存储。
    • 枚举(Enums)
      • 定义和取值:枚举是一种用户自定义的数据类型,用于定义一组命名的常量。例如:
      enum Color {RED,GREEN,BLUE
      };
      
      定义了一个名为Color的枚举类型,其中包含REDGREENBLUE三个枚举常量。默认情况下,RED的值为0,GREEN的值为1,BLUE的值为2,也可以显式地指定枚举常量的值,如enum Color {RED = 1, GREEN = 2, BLUE = 3};
      • 用途:用于提高程序的可读性。例如,在一个图形绘制程序中,使用枚举Color来表示颜色,比使用整数0、1、2来表示不同颜色更加清晰,并且可以防止非法的值被使用。
  3. 指针类型(Pointer Types)
    • 定义和表示:指针是一个变量,其值是另一个变量的地址。例如,int num = 10; int* ptr = #,这里ptr是一个指针,它存储了变量num的地址。指针的类型必须与它所指向的变量类型相匹配,如int*指向int类型的变量,float*指向float类型的变量。
    • 用途:可以用于动态内存分配、访问数组元素、函数参数传递等多种场景。例如,在动态内存分配中,int* dynamicArray = new int[5];可以创建一个包含5个int类型元素的动态数组。在函数参数传递中,使用指针可以在函数内部修改函数外部变量的值。
  4. 引用类型(Reference Types)
    • 定义和特性:引用是一个别名,它必须在定义时初始化,并且之后不能再引用其他对象。例如,int originalVariable = 10; int& referenceVariable = originalVariable;,这里referenceVariableoriginalVariable的引用,对referenceVariable的操作实际上就是对originalVariable的操作。
    • 用途:常用于函数参数传递,避免函数参数的拷贝,提高效率。例如,void function(int& parameter) {...},在函数内部对parameter的操作会直接影响到传递进来的变量。

在这里插入图片描述

表达式

  • 基本算术运算符
    • C++提供了基本的算术运算符,包括加法(+)、减法(-)、乘法(*)、除法(/)和取模(%)。
    • 加法和减法:例如,int a = 5 + 3;计算结果为8int b = 10 - 4;结果为6。这些运算符可以用于整数、浮点数等数值类型。
    • 乘法和除法int c = 2 * 3;得到6,对于除法,int d = 10 / 3;在整数除法中结果为3,因为整数除法会舍去小数部分。如果是浮点数相除,如double e = 10.0 / 3.0;结果为3.333333(具体精度取决于数据类型)。
    • 取模:取模运算符%返回除法运算的余数。例如,int f = 10 % 3;结果为1,常用于判断一个数是否能被另一个数整除等场景。
  • 算术表达式中的类型转换
    • 自动类型转换(隐式类型转换):当不同类型的数据进行算术运算时,C++会自动进行类型转换。一般是将取值范围较小的类型转换为取值范围较大的类型。例如,在表达式int a = 3; double b = 2.5; double c = a + b;中,a会自动转换为double类型后再进行加法运算,结果c5.5
    • 强制类型转换(显式类型转换):可以使用(type)type()(对于一些类型转换函数)的形式进行强制类型转换。例如,int a = (int)3.7;结果为3,将double类型的3.7强制转换为int类型,会舍去小数部分。不过,强制类型转换可能会导致数据精度丢失或其他错误,应谨慎使用。
  1. 关系表达式
    • 关系运算符
      • C++中的关系运算符用于比较两个值的大小关系,包括等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)和小于等于(<=)。
      • 例如,int a = 5; int b = 3; bool c = a > b;这里c的值为true,因为5大于3。关系表达式的结果是bool类型,即truefalse
    • 使用场景和注意事项
      • 关系表达式常用于条件判断,如if语句和while语句等。例如,if (a == b) {... }判断ab是否相等。需要注意的是,在使用==!=时,容易与赋值运算符=混淆。例如,if (a = b)是一个赋值操作,会将b的值赋给a,并且整个表达式的值为a的值,通常这不是我们想要的比较操作,应该仔细检查代码以避免这种错误。
  2. 逻辑表达式
    • 逻辑运算符
      • C++有三种逻辑运算符:逻辑与(&&)、逻辑或(||)和逻辑非(!)。
      • 逻辑与(&&:只有当两个操作数都为true时,结果才为true。例如,bool a = true; bool b = false; bool c = a && b;结果为false。逻辑与运算符还有一个短路特性,即当第一个操作数为false时,不会计算第二个操作数,因为结果已经确定为false
      • 逻辑或(||:只要两个操作数中有一个为true,结果就为true。例如,bool d = a || b;结果为true。逻辑或运算符也有短路特性,当第一个操作数为true时,不会计算第二个操作数,因为结果已经确定为true
      • 逻辑非(!:用于对一个bool值取反。例如,bool e =!a;结果为false
    • 逻辑表达式的嵌套和优先级
      • 逻辑表达式可以嵌套使用,例如,bool f = (a && b) || (!c);。在计算逻辑表达式时,逻辑非!的优先级最高,其次是逻辑与&&,最后是逻辑或||。可以使用括号来改变运算顺序,以确保表达式按照期望的方式计算。
  3. 赋值表达式
    • 赋值运算符
      • 基本的赋值运算符是=,用于将一个值赋给一个变量。例如,int a = 5;5赋给变量a。此外,还有复合赋值运算符,如+=-=*=/=%=。例如,a += 3;等价于a = a + 3;,这些复合赋值运算符可以简化代码并提高代码的执行效率。
    • 赋值表达式的左值和右值概念
      • 在赋值表达式中,左边的操作数必须是一个左值,即可以出现在赋值运算符左边的表达式,它通常是一个变量。右边的操作数可以是一个右值,即可以出现在赋值运算符右边的表达式,它可以是一个常量、变量或表达式的结果。例如,5 = a;是错误的,因为5是一个常量,不是左值。
  4. 条件表达式(三目运算符)
    • 语法和功能
      • 条件表达式的语法为condition? expression1 : expression2,其中condition是一个条件(关系表达式或逻辑表达式等),如果conditiontrue,则计算expression1并返回其结果,否则计算expression2并返回其结果。
      • 例如,int a = 5; int b = 3; int max = (a > b)? a : b;这里max的值为5,因为a > btrue,所以返回a的值。条件表达式可以在一些简单的条件判断场景中替代if - else语句,使代码更加简洁。
  5. 逗号表达式
    • 语法和计算顺序
      • 逗号表达式的语法是expression1, expression2,..., expressionN,它会从左到右依次计算每个表达式的值,最后返回最后一个表达式的值。
      • 例如,int a = (1 + 2, 3 * 4);先计算1 + 2,然后计算3 * 4,最后a的值为12,因为逗号表达式返回最后一个表达式的值。逗号表达式通常用于在一个表达式中执行多个操作,但只关心最后一个操作的结果的场景。
        以下是各类C++表达式对应的代码示例,方便你更好地理解它们的用法:

算术表达式示例

#include <iostream>int main() {// 加法运算int num1 = 5;int num2 = 3;int sum = num1 + num2;std::cout << "加法结果:" << sum << std::endl;// 减法运算int diff = num1 - num2;std::cout << "减法结果:" << diff << std::endl;// 乘法运算int product = num1 * num2;std::cout << "乘法结果:" << product << std::endl;// 整数除法运算int divResult1 = 10 / 3;std::cout << "整数除法结果:" << divResult1 << std::endl;// 浮点数除法运算double num3 = 10.0;double num4 = 3.0;double divResult2 = num3 / num4;std::cout << "浮点数除法结果:" << divResult2 << std::endl;// 取模运算int remainder = 10 % 3;std::cout << "取模结果:" << remainder << std::endl;// 自动类型转换示例int intValue = 5;double doubleValue = 2.5;double result = intValue + doubleValue;std::cout << "自动类型转换结果:" << result << std::endl;// 强制类型转换示例double doubleNum = 3.7;int convertedNum = (int)doubleNum;std::cout << "强制类型转换结果:" << convertedNum << std::endl;return 0;
}

关系表达式示例

#include <iostream>int main() {int a = 5;int b = 3;// 大于关系判断bool greater = a > b;std::cout << "a大于b的判断结果:" << (greater? "true" : "false") << std::endl;// 等于关系判断,注意这里容易误写成赋值(=),要格外小心bool equal = a == b;std::cout << "a等于b的判断结果:" << (equal? "true" : "false") << std::endl;return 0;
}

逻辑表达式示例

#include <iostream>int main() {bool a = true;bool b = false;// 逻辑与运算示例bool andResult = a && b;std::cout << "逻辑与结果:" << (andResult? "true" : "false") << std::endl;// 逻辑或运算示例bool orResult = a || b;std::cout << "逻辑或结果:" << (orResult? "true" : "false") << std::endl;// 逻辑非运算示例bool notResult =!a;std::cout << "逻辑非结果:" << (notResult? "true" : "false") << std::endl;// 逻辑表达式嵌套示例bool nestedResult = (a && b) || (!a);std::cout << "嵌套逻辑表达式结果:" << (nestedResult? "true" : "false") << std::endl;return 0;
}

赋值表达式示例

#include <iostream>int main() {int a = 5;// 基本赋值运算std::cout << "初始a的值:" << a << std::endl;a = 10;std::cout << "赋值后a的值:" << a << std::endl;// 复合赋值运算示例int b = 3;b += 2;  // 等价于b = b + 2;std::cout << "b += 2后的结果:" << b << std::endl;b *= 3;  // 等价于b = b * 3;std::cout << "b *= 3后的结果:" << b << std::endl;return 0;
}

条件表达式(三目运算符)示例

#include <iostream>int main() {int num1 = 5;int num2 = 3;int max = (num1 > num2)? num1 : num2;std::cout << "两数中的较大值:" << max << std::endl;return 0;
}

逗号表达式示例

#include <iostream>int main() {int result = (1 + 2, 3 * 4);std::cout << "逗号表达式结果:" << result << std::endl;return 0;
}

这些示例涵盖了不同类型的C++表达式,你可以将代码复制到C++编译器中运行,观察实际的输出结果,进一步掌握各表达式的特点和用法。

在这里插入图片描述

相关文章:

c++---------数据类型

基本数据类型 整数类型&#xff08;Integral Types&#xff09; int&#xff08;整型&#xff09; 这是最常用的整数类型&#xff0c;通常用于存储一般范围的整数值。在32位系统中&#xff0c;int类型一般占用4个字节&#xff0c;取值范围大约是 - 2147483648到2147483647。例如…...

前端Python应用指南(三)Django vs Flask:哪种框架适合构建你的下一个Web应用?

《写给前端的python应用指南》系列&#xff1a; &#xff08;一&#xff09;快速构建 Web 服务器 - Flask vs Node.js 对比&#xff08;二&#xff09;深入Flask&#xff1a;理解Flask的应用结构与模块化设计 在上一篇博文中&#xff0c;我们深入探讨了Flask框架&#xff0c;…...

鸿蒙系统文件管理基础服务的设计背景和设计目标

有一定经验的开发者通常对文件管理相关的api应用或者底层逻辑都比较熟悉&#xff0c;但是关于文件管理服务的设计背景和设计目标可能了解得不那么清楚&#xff0c;本文旨在分享文件管理服务的设计背景及目标&#xff0c;方便广大开发者更好地理解鸿蒙系统文件管理服务。 1 鸿蒙…...

要查询 `user` 表中 `we_chat_open_id` 列不为空的用户数量

要查询 user 表中 we_chat_open_id 列不为空的用户数量&#xff0c;你可以使用以下 SQL 查询语句&#xff1a; SELECT COUNT(*) FROM user WHERE we_chat_open_id IS NOT NULL AND we_chat_open_id ! ;解释&#xff1a; SELECT COUNT(*): 表示要计算符合条件的行数。FROM us…...

AI科研助手开发总结:向量与数据权限的应用(二)

一、前言 继上篇文章&#xff1a;AI科研助手开发总结&#xff1a;向量与数据权限的应用&#xff08;一&#xff09; 本章根据向量库内存储数据及权限&#xff0c;向量库统一维护和管理数据权限方案讨论。 二、方案分析-基于向量Fields 2.1 思路 结合橙语AI科研助手的业务场…...

python爬虫----爬取视频实战

python爬虫-爬取视频 本次爬取&#xff0c;还是运用的是requests方法 首先进入此网站中&#xff0c;选取你想要爬取的视频&#xff0c;进入视频页面&#xff0c;按F12&#xff0c;将网络中的名称栏向上拉找到第一个并点击&#xff0c;可以在标头中&#xff0c;找到后续我们想要…...

HarmonyOS NEXT 实战之元服务:静态案例效果--航空出行

背景&#xff1a; 前几篇学习了元服务&#xff0c;后面几期就让我们开发简单的元服务吧&#xff0c;里面丰富的内容大家自己加&#xff0c;本期案例 仅供参考 先上本期效果图 &#xff0c;里面图片自行替换 效果图1完整代码案例如下&#xff1a; import { authentication } …...

DP83848以太网移植流程,可以TCP通信

DP83848-EP 是一款高度可靠、功能丰富的强大器件,包含了增强型 ESD 保护、MII 和 RMII,从而在 MPU 选择方面实现最大的灵活性,所有这些特性都融入于 48 引脚 PQFP 封装中。 DP83848-EP 配备 集成子层以支持 10BASE-T 和 100BASE-TX 以太网协议,这些协议确保了与基于其他标…...

css 裁剪 clip-path

clip-path 是一个强大的 CSS 属性&#xff0c;用于裁剪元素的可视区域&#xff0c;支持多种形状裁剪。它可以用来创建复杂的裁剪效果&#xff0c;如圆形、多边形、路径等。 clip-path: none | shape | url(#clipPathId);none&#xff1a;不裁剪&#xff0c;显示完整内容。shap…...

MySQL用表组织数据

用表组织数据 文章目录 用表组织数据一.四种完整性约束二.数值类型2-1三.数值类型2-2四.字符串.日期类型五.设置1.设置主键2.设置标识列3.设置非空4.设置默认值 六.主外键建立后注意事项 一.四种完整性约束 1.域完整性 列 域完整性约束方法:限制数据类型,检查约束,外键约束,默…...

细说STM32F407单片机轮询方式读写SPI FLASH W25Q16BV

目录 一、工程配置 1、时钟、DEBUG 2、GPIO 3、SPI2 4、USART6 5、NVIC 二、软件设计 1、FALSH &#xff08;1&#xff09;w25flash.h &#xff08;2&#xff09; w25flash.c 1&#xff09;W25Q16基本操作指令 2&#xff09;计算地址的辅助功能函数 3&#xff09;器…...

C++-------指针

把地址当做数值 在 C 中&#xff0c;指针本质上就是存储内存地址的变量。每个变量在内存中都有一个唯一的地址&#xff0c;通过取地址运算符 & 可以获取变量的地址&#xff0c;这个地址本质上是一个整数&#xff08;在 32 位系统中是 32 位整数&#xff0c;64 位系统中是 …...

Linux文件目录 --- 移动和改名命令MV、强制移动、试探性移动过、按时间移动

二、MV移动改名命令 重命名文件&#xff1a;mv [选项] 旧文件名 新文件名 移动文件/文件夹&#xff1a;mv [选项] 源文件 目标目录 选项作用-b当覆盖文件时会对被覆盖文件进行先行备份。-i交互式操作&#xff0c;当目标文件已经存在时&#xff0c;会询问是否覆盖。-n试探性覆盖…...

03.HTTPS的实现原理-HTTPS的工作流程

03.HTTPS的实现原理-HTTPS的工作流程 简介1. HTTPS的工作流程1.1. TCP的工作流程1.1.1. 三次握手的详细步骤1.1.2. 三次握手的作用 1.2. HTTPS的工作流程1.2.1. HTTPS与TCP的关系1.2.2. HTTPS的工作流程 2. 公钥和私钥的作用3. 对称密钥的生成和交换4. 对称加密和非对称加密的区…...

vue实现批量下载文件流并压缩

为了实现文件流压缩&#xff0c;我们可以使用 JSZip 和 FileSaver 这两个第三方库。JSZip 是一个用于创建、读取和编辑 .zip 文件的 JavaScript 库&#xff0c;而 FileSaver 则用于在客户端保存文件。 ‌JSZip‌&#xff1a;用于创建和操作zip文件。可以通过 file 方法将文件添…...

前端入门之VUE--ajax、vuex、router,最后的前端总结

前言 VUE是前端用的最多的框架&#xff1b;这篇文章是本人大一上学习前端的笔记&#xff1b;欢迎点赞 收藏 关注&#xff0c;本人将会持续更新。本人不是学前端的&#xff0c;这个是大一的时候上学的和做的笔记&#xff0c;那个时候学的也蒙&#xff0c;故这里对前端做一个总…...

安装k8s涉及命令(方便放到txt离线使用)

查看操作系统信息 uname -a # 查看所有操作系统信息 uname -s # 查看内核名称 uname -r # 查看内核版本号 uname -m # 查看机器硬件名称 cat /etc/os-release # 查看所有操作系统信息 配置hosts cat >> /etc/hosts << EOF 172.171.16.147 crawler-k8s-mast…...

FLV视频封装格式详解

目录(?)[-] OverviewFile Structure The FLV headerThe FLV File BodyFLV Tag Definition FLVTAGAudio TagsVideo TagsSCRIPTDATA onMetaDatakeyframes Overview Flash Video(简称FLV),是一种流行的网络格式。目前国内外大部分视频分享网站都是采用的这种格式. File Structure…...

搭建vue3+vant项目架构

git代码仓库&#xff0c;直接下载压缩包使用 1、首先要安装node.js(18.3 或更高版本) 2、创建vue3项目 npm create vuelatest然后按照自己的需要进行选择就行 到此vue3项目创建完成&#xff0c;接下来是搭建项目架构 3、配置Vant (移动端ui) vue3项目引入vant&#xff0c…...

【Linux】进程间通信 -> 匿名管道命名管道

进程间通信的目的 数据传输&#xff1a;一个进程许需要将它的数据发送给另外一个进程。资源共享&#xff1a;多个进程之间共享同样的资源。通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它们发生了某种事件&#xff08;如进程终止时要通知父进程…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...