16. C++标准库
C++标准库兼容C语言标准函数库,可以在C++标准库中直接使用C语言标准函数库文件,同时C++标准库增加了自己的源代码文件,新增文件使用C++编写,多数代码放在std命名空间中,所以连接C++标准库文件后还需要 using namespace std;。
【终端输入输出】
C++标准库iostream文件提供终端输入输出功能,此文件同时兼容C语言标准函数库中的终端输入输出函数。
终端输出
cout对象用于终端输出,使用方式如下:
cout << 内容1 << 内容2 << 内容3 ......;
每个输出内容使用 << 符号连接,输出内容数量可变,char类型数据不会转换,其它数学数据会自动转换为字符串表示形式,若要输出换行则添加 << endl。
#include <iostream>
using namespace std;
int main()
{char ali[] = "阿狸";int age = 8;cout << "姓名:" << ali << endl << "年龄:" << age << "岁" << endl;return 0;
}
使用cout输出数学数据时,前缀0表示8进制,前缀0x表示16进制。
#include <iostream>
using namespace std;
int main()
{/* 输出20、16、32,多个输出内容可以换行存储 */cout << 20 << endl<< 020 << endl<< 0x20 << endl;return 0;
}
终端输入
cin对象用于终端输入,使用方式类似cout,输入符号为 >>。
#include <iostream>
using namespace std;
int main()
{int a,b;cout << "请输入两个整数" << endl;cin >> a >> b;cout << "两个数据相加结果为:" << a+b << endl;return 0;
}
【STL】
C++标准库最大的特点是增加了数据结构相关类,这组类称为标准模板库,英文简称STL,内部代码大量使用了虚拟类型、符号函数。
数组
array 数组
array内部定义了一个私有数组和一些操作数组函数,常用成员函数如下:
at,使用下标调用数组元素,at会进行数组越界访问检查,越界访问会引发异常并退出程序。
size,返回数组元素个数。
data,返回数组第一个元素的指针。
swap,与另一个array数组进行元素交换,两个数组的元素都将改变。
fill,为所有元素设置一个初始值。
另外array有很多符号成员函数,可以使用[]符号访问内部元素([]符号函数不进行数组越界访问检查),使用=符号在两个长度相同的array对象之间赋值。
#include <iostream>
#include <array> //需要连接array文件
using namespace std;
int main()
{array<int, 5> a = {1,2,3,4,5}; //定义int类型数组,包含5个元素for(int i = 0; i < a.size(); i++){printf("%d\n", a[i]);}return 0;
}
array对象可以嵌套定义,从而定义多维数组:
array<array<int, 2>, 3> a = {{{1, 2}, {3, 4}, {5, 6}}};
赋值时需要使用三层大括号,最外层{}表示为对象a赋值,中层{}表示为内部二维数组赋值,内层{}表示为一维数组赋值。
valarray 数组
valarray数组新增了很多了处理数学数据的成员函数,同时array有的函数valarray基本也有。
sum,返回所有元素相加后的值。
max,返回值最大的元素。
min,返回值最小的元素。
常用符号函数如下:
operator+,为数组中每个元素加上指定数值,增加的数值可以使用另一个valarray指定,此时将同位置的元素相加。
operator-,同上,减去指定数值。
operator*,同上,乘以指定数值。
operator/,同上,除以指定数值。
另外与array的使用方式有一些区别:
1.valarray对象使用构造函数指定数组元素个数,或者创建对象时直接为数组赋值,根据赋值数据个数确定元素数量。
2.创建对象未赋值时,所有元素设置初始值为0,而array不会设置元素初始值。
#include <iostream>
#include <valarray>
using namespace std;
int main()
{valarray<int> a = {1,2,3,4,5};valarray<int> b = {6,7,8,9,10};a = a + b;for(int i = 0; i < a.size(); i++){printf("%d\n", a[i]);}return 0;
}
动态数组
动态数组是长度可变的数组,通过new申请内存实现长度可变,vector类提供动态数组功能,常用成员函数如下:
at,使用下标调用数组元素,同时进行越界访问检查。
size,返回数组元素个数。
data,返回数组第一个元素的指针。
swap,与另一个vector对象进行元素交换。
empty,判断数组是否为空并返回布尔值,为空返回1,否则返回0。
push_back,在末尾添加一个元素。
pop_back,在末尾删除一个元素。
front,返回数组第一个元素。
back,返回数组最后一个元素。
end,提取数组末尾元素的指针,并将指针+1再返回,可以与insert函数配合使用。
insert,在数组指定位置插入数据(位置使用指针指定),此位置及之后的数据向后移动,此函数为重载函数。
erase,删除数组指定位置的数据(位置使用指针指定),此位置之后的数据向前移动,此函数为重载函数。
clear,清空内部元素。
定义方式:
vector<int> a; //定义int类型动态数组。
vector<int> a(5); //使用构造函数指定数组元素个数,元素初始值为0。
vector<int> a(5, 1); //使用构造函数指定数组元素个数、元素初始值,这里创建5个元素的数组,初始值设置为1。
vector<string> a(5, "阿狸"); //使用string对象作为数组元素。
vector<int> a = {1,2,3,4,5}; //定义动态数组时赋值,数组元素个数由赋值数据个数确定。
#include <iostream>
#include <vector>
using namespace std;
int main()
{vector<int> a = {1,2,3,4,5};/* 末尾添加一个元素 */a.push_back(6);printf("末尾元素:%d\n", a.back());/* 末尾删除一个元素 */a.pop_back();printf("末尾元素:%d\n", a.back());int b[5] = {6,7,8,9,10};/* 添加一组元素,参数1指定插入位置指针,参数2指定提供元素的数组起始地址,参数3指定提供元素的数组末尾地址 */a.insert(a.end(), &b[0], &b[5]);for(int i = 0; i < a.size(); i++){printf("%d\n", a[i]);}return 0;
}
字符串
string类实现字符串功能,其按照单字节的方式管理字符,双字节编码的字符可以使用wstring类。
创建string对象并赋值的常用方式:
string a = "阿狸"; //使用=符号赋值。
string a("阿狸"); //使用构造函数赋值,参数为字符串指针。
string a(b); //使用构造函数赋值,参数为另一个string对象。
更多重载构造函数使用方式参考C++标准库手册。
常用成员函数如下:
at,使用下标调用数组元素,同时进行越界访问检查。
swap,与另一个string对象进行元素交换。
empty,判断字符串是否为空,返回布尔值,为空返回true,否则返回false。
size,返回字符串有效字符的个数,不包含末尾空字符。
length,同size。
data,返回第一个元素的指针。
c_str,同data。
front,返回第一个有效字符。
back,返回最后一个有效字符。
insert,在指定位置插入一组元素。
clear,清空字符串。
string还定义了很多成员符号函数,可以使用这些符号函数进行与符号含义相同的操作,比如使用 =、+、== 对string对象进行修改、连接、比较。
#include <iostream>
#include <string>
using namespace std;
int main()
{string ali = "阿狸";string xyy = "喜羊羊";string zoo = ali + xyy;printf("%s\n", zoo.data());if(zoo == "阿狸喜羊羊"){printf("相同\n");}else{printf("不同\n");}return 0;
}
转换 string 对象的全局函数
stoi,将表示数学数据的字符串转换为对应的 int 类型数据,并返回。
stol,同上,转换为 long 类型。
stoul,同上,转换为 unsigned long 类型。
stoll,同上,转换为 long long 类型。
stoull,同上,转换为 unsigned long long 类型。
stof,同上,转换为 float 类型。
stod,同上,转换为 double 类型。to_string,将一个数学数据转换为 string 对象表示形式。
to_wstring,同上,转换为 wstring 对象。
#include <iostream>
#include <string>
using namespace std;
int main()
{string s1 = "10";int i1 = stoi(s1);int i2 = 100;string s2 = to_string(i2);return 0;
}
栈
stack类以栈的方式管理数据,栈的特点是最后存储的数据最先使用,类似弹夹,常用函数如下:
push,入栈一个数据。
top,返回栈顶数据,数据不从栈内删除。
pop,删除栈顶数据,数据不返回。
size,返回栈内数据个数。
empty,判断栈是否为空,返回布尔值,为空返回true,否则返回false。
swap,与另一个栈整体交换数据。
#include <iostream>
#include <stack>
using namespace std;
int main()
{stack <int> a;for(int i = 0; i < 10; i++){a.push(i);}while(!a.empty()){printf("%d\n",a.top());a.pop();}return 0;
}
队列
queue类提供队列方式管理数据的功能,队列管理方式是首先存储的数据首先使用,就像排队一样,数据的使用遵守先来后到的原则,数据不支持使用下标的方式调用,常用函数如下:
push,入队一个数据。
front,返回队列第一个数据,数据不删除。
pop,删除队列第一个数据,数据不返回。
back,返回队列最后一个数据,数据不删除。
size,返回队列内数据个数。
empty,判断队列是否为空,返回布尔值,为空返回true,否则返回false。
swap,与另一个队列进行数据交换。
#include <iostream>
#include <queue>
using namespace std;
int main()
{queue <int> a;for(int i = 0; i < 10; i++){a.push(i);}while(!a.empty()){printf("%d\n",a.front());a.pop();}return 0;
}
双端队列
双端队列可以在头部、尾部新增数据,使用数据时也可以在头部、尾部使用,还可以在中间添加、删除数据,数据的管理方式更灵活。
deque类实现双端队列功能,常用函数如下:
push_front,在头部添加一个数据。
push_back,在末尾添加一个数据。
front,返回头部第一个数据,数据不删除。
back,返回末尾第一个数据,数据不删除。
pop_front,删除头部第一个数据,数据不返回。
pop_back,删除末尾第一个数据,数据不返回。
at,使用下标访问队列元素,并进行越界访问检查。
size,返回队列内数据个数。
empty,判断队列是否为空,返回布尔值,为空返回true,否则返回false。
begin,返回头部第一个数据的指针。
end,返回末尾第一个数据的指针+1,可以与insert函数配合使用。
insert,在指定位置插入数据(位置使用指针指定),此位置及之后的数据向后移动,此函数为重载函数。
erase,删除指定位置的数据(位置使用指针指定),此位置之后的数据向前移动,此函数为重载函数。
swap,与另一个双端队列进行数据交换。
clear,清空队列。
#include <iostream>
#include <deque>
using namespace std;
int main()
{deque <int> a;for(int i = 0; i < 10; i++){a.push_back(i);}a.insert(a.begin()+3, 99); //在下标3处添加数据a.erase(a.end()-2); //在末尾下标-1处删除数据while(!a.empty()){printf("%d\n",a.front());a.pop_front();}return 0;
}
列表
列表类似双端队列,但是实现原理不同,在列表中间插入数据时无需移动其它数据,缺点是不能随机访问列表中间的数据,只能在头部或尾部访问数据。
list类实现列表功能,常用成员函数如下:
push_front,在头部添加一个数据。
push_back,在末尾添加一个数据。
front,返回头部第一个数据,数据不删除。
back,返回末尾第一个数据,数据不删除。
pop_front,删除头部第一个数据,数据不返回。
pop_back,删除末尾第一个数据,数据不返回。
size,返回列表的长度。
empty,判断列表是否为空,返回布尔值,为空返回true,否则返回false。
begin,返回头部第一个数据的指针,返回值为指针常量,不能修改。
end,返回末尾第一个数据的指针+1,返回值为指针常量,不能修改。
insert,在指定位置插入数据。
erase,在指定位置删除数据。
splice,将另一个列表插入到此列表的指定位置。
remove,删除指定值的所有数据。
swap,与另一个列表进行数据交换。
clear,清空列表。
#include <iostream>
#include <list>
using namespace std;
int main()
{list <int> a = {1,2,3};list <int> b = {11,12,13};a.splice(a.end(), b);while(!a.empty()){printf("%d\n",a.front());a.pop_front();}return 0;
}
【智能指针】
C++使用new、delete简化了申请和释放内存的步骤,但是在代码非常复杂时依然很容易忘记释放内存,或者程序代码编写有问题导致不会执行delete,在大量申请内存时,内存使用完后不释放是很危险的,为了避免内存不被释放,C++增加了智能指针对象,智能指针可以自动管理申请的内存,其构造函数接收管理的内存地址,析构函数释放管理的内存。
智能指针定义在 memory 文件中,有如下三种:
unique_ptr,独占申请内存的管理权,不能与其它智能指针共同管理同一块内存,否则会出错。
shared_ptr,可以与其它shared_ptr对象共同管理同一块内存,内存不再使用后只被其中一个shared_ptr对象释放。
weak_ptr,在某些特殊情况下配合shared_ptr使用。
unique_ptr
常用成员函数如下:
get,返回管理的内存地址。
reset,修改管理的内存地址,原有内存会被释放,若修改的内存地址与原有内存地址相同,则内存也会被释放,reset不会判断修改值与原值是否相同。此函数为重载函数,若参数为空则用于释放内存。
release,退出此内存的管理权,并返回管理的内存地址,此函数不释放内存。
#include <iostream>
#include <string>
#include <memory>
using namespace std;
int main()
{unique_ptr <string> p1(new string); //<>符号内设置指针类型,p1为智能指针对象名称unique_ptr <string> p2;*p1 = "阿狸";p2 = move(p1); //转移内存管理权,注意不能使用=符号直接在两个unique_ptr对象之间赋值printf("%s\n", p2->data());return 0;
}
shared_ptr
多个shared_ptr对象可以同时管理同一块申请的内存,多个shared_ptr对象会使用一个数据记录共同管理内存的智能指针数量,在只剩下一个shared_ptr对象后才会去释放内存,从而防止内存被提前释放或多次释放。
注意,多个shared_ptr对象共同管理内存时并非直接将此内存的地址交由shared_ptr对象,而是在创建第一个shared_ptr对象时接收管理内存,新的shared_ptr对象引用其它已赋值shared_ptr对象进行赋值。
常用成员函数如下:
get,返回管理的内存地址。
reset,修改管理的内存地址,使用方式同unique_ptr。
use_count,查询并返回管理内存的shared_ptr对象数量,查询结果包含本对象。
unique,判断本对象是否为内存的唯一管理者,返回布尔值,是的话返回true,否则返回false。
shared_ptr对象设置管理内存的方式如下:
1.使用构造函数直接设置管理内存。
2.使用构造函数调用另一个shared_ptr对象设置管理内存。
3.创建空对象后使用reset成员函数设置管理内存。
#include <iostream>
#include <string>
#include <memory>
using namespace std;
int main()
{shared_ptr<string> p1(new string);*p1 = "阿狸";printf("%s\n""内存管理者数量:%d\n",p1->data(), p1.use_count());shared_ptr<string> p2(p1); //引用p1创建p2printf("%s\n""内存管理者数量:%d\n",p2->data(), p1.use_count());return 0;
}
weak_ptr
weak_ptr用于配合shared_ptr使用,有如下两种作用:
1.创建一个只使用内存(有限使用)、不释放内存的智能指针,释放内存的工作交给其它shared_ptr对象执行。
2.解决shared_ptr对象的死锁问题,当两个对象都使用new申请内存存储、并分别使用一个shared_ptr成员管理对方时会形成死锁,导致两者都无法释放内存,此时可以将一个类中的shared_ptr成员改为weak_ptr。
使用注意事项:
1.weak_ptr对象不能操作内存中的数据,weak_ptr对内存的使用只限于查询此内存的相关属性,若需要使用此内存中的数据可以创建一个shared_ptr对象并使用其构造函数接收weak_ptr对象。
2.weak_ptr对象赋值使用的内存地址时只能调用其它shared_ptr对象赋值,不能直接接收一个内存地址,可以使用构造函数赋值、或者使用=符号函数赋值。
常用成员函数如下:
use_count,查询并返回管理此内存的shared_ptr对象数量,其中不包含本对象,weak_ptr对象没有内存管理权。
expired,查询并返回此内存是否有管理者,有则返回true,没有返回false。
reset,放弃内存的使用权,不再使用此内存。
死锁是一个计算机术语,表示两个行为互相制约,彼此都不能继续执行,好比你出门忘记带钥匙,需要开锁公司进行开锁,开锁公司开锁的前提是你提供房屋所有权证明,而你的证明文件锁在屋内,只有开锁之后才能出示所有权证明,此时开锁与出示所有权证明两个行为互相制约,在计算机中常见的情况是两个程序都需要独占两个文件使用权,程序1打开了文件1,程序2打开了文件2,此时两个程序都在等待对方关闭文件,从而形成死锁,使用shared_ptr对象管理内存时也会有死锁现象发生,比如下面的代码。
#include <iostream>
#include <memory>
using namespace std;class sheep;class fox
{
public:fox(){printf("fox构造函数\n");}~fox(){printf("fox析构函数\n");}shared_ptr<sheep> p1;//......
};class sheep
{
public:sheep(){printf("sheep构造函数\n");}~sheep(){printf("sheep析构函数\n");}shared_ptr<fox> p1;//......
};int main()
{shared_ptr<fox> ali(new fox);shared_ptr<sheep> xyy(new sheep);ali->p1 = xyy;xyy->p1 = ali; //两个对象互相使用shared_ptr指向对方return 0;
}
两个对象内部的shared_ptr智能指针成员互相指向对方,彼此都在等待对方被释放,从而造成两者都不会释放,两个对象的构造函数都不会执行,将fox或sheep的shared_ptr对象成员改为weak_ptr即可解决问题,但是此时其中一方对内存的使用会受到限制。
智能指针的作用是方便我们编写代码,而不是为了增加程序代码的复杂度,在混乱的智能指针关系中可以选择使用普通指针,内存管理完全由自己掌控,注重执行效率的程序也应该使用普通指针自行管理内存。
相关文章:

16. C++标准库
C标准库兼容C语言标准函数库,可以在C标准库中直接使用C语言标准函数库文件,同时C标准库增加了自己的源代码文件,新增文件使用C编写,多数代码放在std命名空间中,所以连接C标准库文件后还需要 using namespace std;。 【…...

JVM内存结构介绍
1. 什么是JVM 我们都知道在 Windows 系统上一个软件包装包是 exe 后缀的,而这个软件包在苹果的 Mac OSX 系统上是无法安装的。类似地,Mac OSX 系统上软件安装包则是 dmg 后缀,同样无法在 Windows 系统上安装。 Java 代码为什么可以在 Windows…...

Linux常见指令总结
ls:显示当前目录下文件列表 常用的命令行参数: -l 显示更多的文件属性 -a 显示所有的文件/目录(包括隐藏的) -d 只显示目录 ps:参数可以叠加使用。 例如:ls -la 显示所有文件…...

Day35-Linux网络管理5
Day35-Linux网络管理5 1. 网卡配置2. DNS客户端域名解析配置3. 给网卡配多个IP4. ip地址查看和设置4.1 ifconfig命令4.2 ip命令4.3 ip命令:查看和设置网络配置4.4 ip命令帮助 5. 路由5.1 路由功能分类:5.2 查看路由:5.3 路由表:5.…...

9个神奇免费AI编程助手,实现高效自动代码生成!
在AIGC技术工具快速发展的时代,对高效智能编程工具的需求和关注已达到空前的高度。本文将介绍9款免费且好用的AI编程助手工具。无论你是经验丰富的开发人员还是刚开始编程旅程的新手,这些AI代码软件都能帮助你提高项目开发的生产力、创造力和准确性&…...

Python 导入Excel三维坐标数据 生成三维曲面地形图(体) 5-3、线条平滑曲面且可通过面观察柱体变化(三)
环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 代码: import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata fro…...

【CSP】2022–09-3 防疫大数据 100分 STL大模拟 使用map优化索引 有坑得注意
2022–09-3 防疫大数据 STL大模拟 使用map优化索引 2022–09-3 防疫大数据 STL大模拟 使用map优化索引基本思路遇到的问题(学到的东西)感悟完整代码 2022–09-3 防疫大数据 STL大模拟 使用map优化索引 这题中规中矩,不算太难也不算太简单&am…...

【Linux基础(三)】信号
学习分享 1、信号的基本概念2、查看信号列表3、常见信号名称4、signal库函数5、发送信号kill6、kill - signal (无参信号)示例6.1、kill - signal (不可靠信号)示例6.2、kill - signal (可靠信号)示例 7、信号分类7.1、信号运行原理分类7.2、信号是否携带…...

GEE图像可视化常用函数
目录 图层操作Map.addLayer()Map.centerObject() 直方图ui.Chart.image.histogram() 时间序列统计ui.Chart.image.series()ui.Chart.image.seriesByRegion() …...

c++基础语法
文章目录 前言命名空间命名空间的使用 缺省参数缺省参数的使用 函数重载函数重载的作用函数重载的使用函数重载原理 引用引用的使用引用的使用场景引用和指针 extern Cinlineauto范围fornullptr 前言 大家好我是jiantaoyab,这篇文章给大家带来的是c语言没有的一些特…...

【工作实践-07】uniapp关于单位rpx坑
问题:在浏览器页面退出登录按钮上“退出登录”字样消失,而在手机端页面正常;通过查看浏览器页面的HTML代码,发现有“退出登录”这几个字,只不过由于样式问题,这几个字被挤到看不见了。 样式代码中有一行为:…...
服务层组件
目录 连接层(Connection Pool) SQL接口(SQL Interface) 查询缓存(Caches&Buffers) Management Services&Utilities 查询分析器(Parser) 优化器(Optimizer)...

【学习笔记】VMware vSphere 6.7虚拟化入门
VMware vSphere 6.7虚拟化入门课程介绍 课程内容 1、VMware vSphere 6.7虚拟化入门课程介绍 2、ESXi6.7控制台设置 3、使用vSpkere Host client管理虚拟机 4、VMware EsXi基础操作 5、VMware Esxi存储管理 6、管理ESXi主机网络与虚拟机网络 7、安装配置vCenter Server Applia…...
如何防范企业内部安全威胁?
1 用户行为分析(UEBA) 现代化的用户行为分析产品具有多种优势功能,使企业能够有效地检测内部威胁。用户行为分析软件通过收集和分析来自各种来源的数据来分析和检测内部人员的可疑行为。这些来源包括网络日志和用户活动日志。通过检查这些数…...

内网渗透-跨域环境渗透-1
目录 smbclient工具 mimikatz工具 Kerbers协议 NTLM认证 hash传递攻击(PTH攻击) 黄金票据攻击 白银票据 MS14-068 smbclient工具 在linux里面连接远程windows共享目录,可以使用这个工具 第一种连接方式:smbclient -L 目…...

安信可IDE(AiThinker_IDE)编译ESP8266工程方法
0 工具准备 AiThinker_IDE.exe ESP8266工程源码 1 安信可IDE(AiThinker_IDE)编译ESP8266工程方法 1.1 解压ESP8266工程文件夹 我们这里使用的是NON-OS_SDK,将NON-OS_SDK中的1_UART文件夹解压到工作目录即可 我这里解压到了桌面,…...

【java数据结构】HashMap和HashSet
目录 一.认识哈希表: 1.1什么是哈希表? 1.2哈希表的表示: 1.3常见哈希函数: 二.认识HashMap和HashSet: 2.1关于Map.Entry的说明:,> 2.2Map常用方法说明: 2.3HashMap的使用案例: 2.4Set常见方法…...

基于Springboot的高校汉服租赁网站(有报告)。Javaee项目,springboot项目。
演示视频: 基于Springboot的高校汉服租赁网站(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…...

分布式解决方案
目录 1. 分布式ID1-1. 传统方案1-2. 分布式ID特点1-3. 实现方案1-4. 开源组件 2. 分布式Session2-1. 传统Session2-2. Spring-Session2-3. Token Redis2-4. JWT2-5. 拦截器统一处理Token2-6. Oauth2 3. 分布式锁3-1. redis3-2. Zookeeper 1. 分布式ID 1-1. 传统方案 时间戳U…...

力扣刷题日记——L724. 寻找数组的中心下标
1. 前言 今天是力扣刷题日记的第二天,今天依旧是一道简单题啊,慢慢来,先看看题目是什么吧。 2. 题目描述 给你一个整数数组 nums ,请计算数组的 中心下标。 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

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

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...