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

【STL】C++ vector类模板

文章目录

基本概念

vector是类型相同的对象的容器,vector的大小可以变化,可以向数组中增加元素。因此,vector容器和数组非常相似,也称为单端数组。

在这里插入图片描述

vector与普通数组区别:不同之处在于数组是静态空间,而vector可以动态扩展。 动态扩展并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间。

  • vector是将元素置于一个动态数组中加以管理的容器
  • vecotr可以随机存取元素(支持索引值)直接存取,用[]操作符或at()方法)
  • vector尾部添加或移除元素非常快速,但在中部或头部插入元素或移除元素比较费时
  • vector的元素地址是连续的,动态扩容后可能地址会发生变化,即可能会在一块新的地址重新放新的连续的元素

vector的使用

定义和初始化

头文件:

#include<vector>

像定义变量一样定义vector变量:

vector<类型名> 变量名;

初始化的方式比较多,有如下几种:

1 vector<T> v1;                    //v1为空,执行默认初始化
2 vector<T> v2(v1);                //v2中包含v1所有元素的副本
3 vector<T> v2=v1;                //等价于v2(v1)
4 vector<T> v3(n,val);            //v3中包含n个重复元素,每个元素的值都是val
5 vector<T> v4(n);                //v4包含n个重复执行了值初始化的对象
6 vector<T> v5{a,b,c...};         //包含初始化元素个数,每个元素被对应的赋予相应的值
7 vector<T> v5={a,b,c...};        //等价v5{a,b,c...}

类型名可以是int、double、char、struct,也可以是STL容器:vector、set、queue。

vector<int> name;
vector<double> name;
vector<char> name;
vector<struct node> name;
vector<vector<int> > name;//注意:> >之间要加空格

注意:vector<vector<int> > name;>>之间要加空格。

vector数组就是一个一维数组,如果定义成vector数组的数组,那就是二维数组**。**

vector<int> array[SZIE]; //二维变长数组

在此,我送你一句话非常受用的话:低维是高维的地址。

二维数组中,它的一维形式就是地址。例如:

#include <iostream>
using namespace std;int main(){int arr[3][2];//定义一个3行2列的地址cout<<arr[0]<<endl; //输出arr第1行的地址cout<<arr[1]<<endl; //输出arr第2行的地址cout<<arr[2]<<endl; //输出arr第3行的地址return 0;
}
/*运行结果:0x61fe00 //arr第1行的地址
0x61fe08 //arr第2行的地址
0x61fe10 //arr第3行的地址*/

所以,vector容器也可以这样理解。

构造函数

功能描述:创建vector容器

函数原型

1. vector<T> v; //采用模版实现类实现,默认构造函数。T表示数据的类型,可以是int类型,也可以是string对象。
2. vector(v.begin(), v,end());  //将v[begin().end())区间(前闭后开)中的元素拷贝给本身。注意拷贝的元素是左闭右开区间
3. vector(n, elem);  //构造函数将n个elem拷贝给本身。
4. vector(const vector &vec);  //拷贝构造函数。

代码示例

#include <vector>
#include <iostream>
using namespace std;int main()
{int iArray[]{ 1,2,3,4,5 };vector<int> vecIntA(iArray, iArray + 5);    //里面为1,2,3,4,5//vector<int> vecIntB(vecIntA.begin(), vecIntA.end());  //里面为1,2,3,4,5vector<int> vecIntB(vecIntA.begin() + 2, vecIntA.begin() + 5);   //里面为3,4,5vector<int> vecIntC(3, 9);  //里面为9,9,9vector<int> vecIntD(vecIntC);   //拷贝构造函数调用,里面为9,9,9for (int i = 0; i < vecIntD.size(); i++){cout << vecIntD[i] << endl;}
}
/*运行结果:v1: 0 1 2 3 4 5 6 7 8 9
v2: 0 1 2 3 4 5 6 7 8 9
v3: 6 6 6 6 6 6 6 6 6 6
v4: 6 6 6 6 6 6 6 6 6 6

总结: vector的多种构造方式没有可比性,灵活使用即可

赋值操作

功能描述: 给vector容器进行赋值

函数原型

5. vector& operator=(const vector &vec);  //重载等号操作符。
6. assign(begin,end);  //将[begin,end)区间中的数据拷贝赋值给本身。
7. assign(n,elem);  //将n个elem拷贝赋值给本身。

代码示例

void printVector(vector<int> v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); ++it){cout << *it << "  ";}cout << endl;
}//vector容器构造
void test1()
{vector<int> v1;//默认构造 无参构造for (int i = 0; i < 10; ++i){v1.push_back(i);}cout << "v1:"; printVector(v1); cout << endl;//赋值 operator=vector<int> v2;v2 = v1;//重载等号= 操作符cout << "v2:"; printVector(v2); cout << endl;//赋值 assign 这不是构造 是赋值vector<int> v3;v3.assign(v1.begin(), v1.end());//将[beg, end)区间中的数据拷贝赋值给本身。cout << "v3:"; printVector(v3); cout << endl;//赋值 assign 这不是构造 是赋值vector<int> v4;v4.assign(10, 100);//将n个elem拷贝赋值给本身。cout << "v4:"; printVector(v4); cout << endl;
}
/*运行结果:v1: 0 1 2 3 4 5 6 7 8 9
v2: 0 1 2 3 4 5 6 7 8 9
v3: 0 1 2 3 4 5 6 7 8 9
v4: 100 100 100 100 100 100 100 100 100 100

总结: vector赋值方式比较简单,使用operator=,或者assign都可以

容量和大小

功能描述: 对vector容器的容量和大小操作

函数原型:

8. empy(); //判断容器是否为空,空返回true,不为空返回false
9. capacity(); //容器的容量,capacity>=size
10. size();  //返回容器中元素的个数,capacity>=size
11. resize(int num);  //重新指定容器的长度为num,若容器变长,则以 默认值0 填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。//如果容器变短,则末尾超出容器长度的元素被删除。
12. resize(int num, elem); //重新指定容器的长度为num,若容器变成,则以 elem值 填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。

代码示例

void printVector(vector<int>& v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); ++it){cout << *it << "  ";}cout << endl;
}//vector容器构造
void test1()
{vector<int> v1;//默认构造 无参构造for (int i = 0; i < 10; ++i){v1.push_back(i+1);}cout << "v1:"; printVector(v1);if (v1.empty()){cout << "容器为空!" << endl;}else{cout << "容器不为空!" << endl;cout << "容器的容量为:" << v1.capacity() << endl;cout << "容器的大小为:" << v1.size() << endl;}cout << string(50, '-') << endl;//重新指定大小  比原来长v1.resize(12);//默认值0 填充cout << "v1:"; printVector(v1); cout << endl;cout << string(50, '-') << endl;v1.resize(15, 1);//指定值1 填充cout << "v1:"; printVector(v1); cout << endl;cout << string(50, '-') << endl;//重新指定大小  比原来短v1.resize(10);//把超出的部分删除cout << "v1:"; printVector(v1); cout << endl;cout << string(50, '-') << endl;
}
/*运行结果:v1: 1 2 3 4 5 6 7 8 9 10
容器不为空!
容器的容量为:13
容器的大小为:10
-------------------------------------------------------------
v1: 1 2 3 4 5 6 7 8 9 10 0 0
-------------------------------------------------------------
v1: 1 2 3 4 5 6 7 8 9 10 0 0 1 1 1
-------------------------------------------------------------
v1: 1 2 3 4 5 6 7 8 9 10
-------------------------------------------------------------

总结:

  • 判断是否为空 — empty
  • 返回元素个数 — size
  • 返回容器容量 — capacity
  • 重新指定大小 — resize

插入和删除

函数原型:

13. push_back(ele);  //尾部插入元素ele。
14. pop_back();  //删除最后一个元素。
15. insert(const_iterator pos, ele); //迭代器指向位置pos插入元素ele。
16. insert(const_iterator pos, int count ele); //迭代器指向位置pos插入count个元素。
17. erase(const_iterator pos); //删除迭代器指向的元素。
18. erase(cons_titerator start, const_iterator end);  //删除迭代器从start到end之间的元素。
19. clear();  //删除容器中所有元素。   

代码示例

#include <iostream> 
#include<vector> 
using namespace std;
void printVector(const vector<int>& vec)//形参使用const,避免被修改
{   //const_iterator只读迭代器for (vector<int>::const_iterator it = vec.begin(); it != vec.end(); ++it){cout << *it<< ",";}cout << endl;
}
int main()
{vector<int> v;for (int i = 0; i < 5; i++){v.push_back(i + 1);//尾部插入元素}printVector(v);//1 2 3 4 5v.insert(v.begin() + 1, 2, 100);//在第二个元素前插入2个100printVector(v);//1 100 100 2 3 4 5v.pop_back();//尾部删除一个元素printVector(v);//1 100 100 2 3 4cout << "-------------" << endl;v.erase(v.begin());//删除第一个元素printVector(v);//100 100 2 3 4vector<int>::const_iterator it=v.erase(v.begin() + 1, v.end() - 1);//删除从第二个元素到倒数第二个元素,返回下一个有效迭代器printVector(v);//100 4v.insert(it, 66);printVector(v);//100 66 4return 0;
}

数据存取

功能描述:对vector中的数据进行存取操作。

函数原型:

20. at(int idx);   ///返回索引为idx所指的数据。
21. operator[];  //返回索引idx所指的数据。
22. front();  //返回容器中第一个数据元素。
23. back();   //返回容器中最后一个数据元素。
24. swap(vec);  //将vec与本身的元素互换。
25. reserve(int len); //容器预留len个元素长度,预留位置不初始化,元素不可访问。

代码示例

#include <iostream>
#include<vector> 
using namespace std;
void printVector(vector<int> v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}
int main()
{vector<int> v1;for (int i = 0; i < 10; i++){v1.push_back(i);}//利用[]方式访问数组中元素for (int i = 0; i < v1.size(); i++){cout << v1[i] << " ";}cout << endl;//利用at方式访问元素for (int i = 0; i < v1.size(); i++){cout << v1.at(i) << " ";}cout << endl;//获取第一个元素cout << "第一个元素为:" << v1.front() << endl;//获取最后一个元素cout << "最后一个元素为:" << v1.back() << endl;return 0; 
}
/*运行结果:0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
第一个元素为:0
最后一个元素为:9

互换容器

功能描述:实现两个容器内元素进行互换。

函数原型

24. swap(vec);  //将vec与本身的元素互换。

代码示例

#include <iostream>
#include<vector> using namespace std;//vector容器互换void printVector(vector<int>v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;}//1、基本使用
void test06()
{cout << "交换前:" << endl;vector<int> v1;for (int i = 0; i < 10; i++){v1.push_back(i);}printVector(v1);vector<int>v2;for (int i = 10; i > 0; i--){v2.push_back(i);}printVector(v2);cout << "交换后:" << endl;v1.swap(v2);printVector(v1);printVector(v2);
}//2、实际用途
//巧用swap可以收缩内存空间
void test07()
{vector<int>v;for (int i = 0; i < 100000; i++){v.push_back(i);}cout << "v的容量为:" << v.capacity() << endl;cout << "v的大小为:" << v.size() << endl;v.resize(3);  //重新指定大小cout << "v的容量为:" << v.capacity() << endl;  //resize操作,容量并没有变,多余的容量浪费了cout << "v的大小为:" << v.size() << endl;//巧用swap收缩内存vector<int>(v).swap(v);  //vector<int>(v)创建了一个为匿名对象,会按v的大小初始化这个匿名对象容器的大小//.swap(v)会对匿名对象容器与原容器做一个交换,则原容器的指针指向匿名对象的容器,匿名对象的容器的指针改为指向原容器//	系统运行完创建匿名函数这一句语句后对匿名对象的指针(即地址、内存)进行回收cout << "v的容量为:" << v.capacity() << endl;cout << "v的大小为:" << v.size() << endl;
}int main()
{test06();test07();return 0;
}

vector的迭代器

vector容器的迭代器是支持随机访问的迭代器

在这里插入图片描述

可以看到vector是左闭右开的容器,常用的迭代器是v. begin() 和v.end(),前者指向第一个元素,后者指向最后一个元素的下一个位置。vector容器还封装了很多对外接口,比如插值insert()、尾插法push_back()、尾删法pop_back()等等。

vector储存自定义数据类型

比如结构体

struct Student {
string name; // 名字
int age; // 年龄
};int main() {vector<Student> class1; // 班级Student stu1, stu2;// 学生1,学生2stu1.name = "luobo";stu1.age = 12;stu2.name = "xiaoming";stu2.age = 25;class1.push_back(stu1);class1.push_back(stu2);return 0;
}

可以用下面的方式使用vector定义二维数组:

vector<vector<int>> vecvec = {{1, 2, 8}, {2, 4, 9}, {4, 7, 10}, {6, 8, 11}};

我们可以通过一个构造函数快速构建这样的一个动态数组,而用构造函数的写法和用循环是等价的。

相关文章:

【STL】C++ vector类模板

文章目录 基本概念vector的使用定义和初始化构造函数赋值操作容量和大小插入和删除数据存取 互换容器vector的迭代器vector储存自定义数据类型 基本概念 vector是类型相同的对象的容器&#xff0c;vector的大小可以变化&#xff0c;可以向数组中增加元素。因此&#xff0c;vec…...

物联网——WatchDog(监听器)

看门狗简介 独立看门狗框图 看门狗原理&#xff1a;定时器溢出&#xff0c;产生系统复位信号&#xff1b;若定时‘喂狗’则不产生系统复位信号 定时中断基本结构&#xff08;对比&#xff09; IWDG键寄存器 独立看门狗超时时间 WWDG(窗口看门狗) WWDG特性 WWDG超时时间 由于…...

从零开始写游戏之斗地主-网络通信

在确定了数据结构后&#xff0c;原本是打算直接开始写斗地主的游戏运行逻辑的。但是突然想到我本地写出来之后&#xff0c;也测试不了啊&#xff0c;所以还是先写通信模块了。 基本框架 在Java语言中搞网络通信&#xff0c;那么就得请出Netty这个老演员了。 主要分为两个端&…...

【智能控制】实验,基于MATLAB的模糊推理系统设计,模糊控制系统设计

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…...

Vega Editor 基于 Web 的图形编辑器

Vega Editor 是一个强大的基于 Web 的图形编辑器&#xff0c;专为 Vega 和 Vega-Lite 可视化语法设计。它提供了一个交互式的环境&#xff0c;用户可以在其中编写、预览和分享他们的 Vega 和 Vega-Lite 可视化作品。Vega 和 Vega-Lite 是用于声明性可视化的开源语法&#xff0c…...

SQL 中SET @variable的使用

在 SQL 中&#xff0c;SET variable 用于声明和赋值用户定义的变量。具体来说&#xff0c; 符号用于表示一个局部变量&#xff0c;可以在 SQL 语句中存储和使用。它通常在存储过程、函数或简单的 SQL 查询中使用。 1. 声明并赋值给变量 你可以使用 SET 语句给一个变量赋值。例…...

基于 Vite 封装工具库实践

项目背景&#xff1a;公司在多个项目中频繁使用相同的工具函数。为了避免每次开发新项目时都重复复制代码&#xff0c;决定通过 Vite 封装一个时间函数组件库。该库将被发布到 Verdaccio 供团队其他项目使用。 项目介绍 本项目封装了一个时间函数工具库&#xff0c;使用 Momen…...

Oracle DataGuard 主备正常切换 (Switchover)

前言 众所周知&#xff0c;DataGuard 的切换分为两种情况&#xff1a; 系统正常情况下的切换&#xff1a;这种方式称为 switchover&#xff0c;是无损切换&#xff0c;不会丢失数据。灾难情况下的切换&#xff1a;这种情况下一般主库已经启动不起来了&#xff0c;称为 failov…...

[Redis#13] cpp-redis接口 | set | hash |zset

目录 Set 1. Sadd 和 Smembers 2. Sismember 3. Scard 4. Spop 5. Sinter 6. Sinter store Hash 1. Hset 和 Hget 2. Hexists 3. Hdel 4. Hkeys 和 Hvals 5. Hmget 和 Hmset Zset 1. Zadd 和 Zrange 2. Zcard 3. Zrem 4. Zscore cpp-redis 的学习 主要关注于…...

青海摇摇了3天,技术退步明显.......

最近快手上的青海摇招聘活动非常火热&#xff0c;我已经在思考是否备战张诗尧的秋招活动。开个玩笑正片开始&#xff1a; 先说一下自己的情况&#xff0c;大专生&#xff0c;20年通过校招进入杭州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c…...

Flask+Minio实现断点续传技术教程

什么是MinIO MinIO是一个高性能的分布式对象存储服务&#xff0c;与Amazon S3 API兼容。它允许用户存储和检索任意规模的数据&#xff0c;非常适合于使用S3 API的应用程序。MinIO支持多租户存储&#xff0c;提供高可用性、高扩展性、强一致性和数据持久性。它还可以作为软件定义…...

Java中Logger定义的三种方式

在 Java 项目中&#xff0c;日志记录是开发中的一个重要部分&#xff0c;用于跟踪系统运行状态、排查问题以及记录重要事件。在定义日志记录器时&#xff0c;经常会遇到一些写法上的选择&#xff0c;比如 Logger 的作用域、是否使用静态变量&#xff0c;以及如何命名变量。本篇…...

模型压缩技术

目录 模型压缩技术 权重剪枝: 量化技术: 知识蒸馏: 低秩分解: 一、权重剪枝 二、量化技术 三、知识蒸馏 四、低秩分解 模型压缩技术 权重剪枝: 描述:通过删除模型中不重要的权重来减少参数数量和计算量。举例说明:假设我们有一个神经网络模型,其中某些神经元的…...

面试题整理

1 spring使用中有哪些设计模式 工厂模式-beanFactory,代理模式-aop,单例模式-每个bean默认都是单例的,原型模式-当将bean的作用域改为prototype时每次获取bean时使用了原型模式创建对象,责任链模式-dispatchServle查找url对应的处理器映射器时使用了,观察者模式-spring的…...

Linux

1、显示系统中所有进程 ps -ef运行效果&#xff1a; [rootredhat-9 ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 19:01 ? 00:00:01 /usr/lib/systemd/systemd rhgb --switched-r root 2 0 0…...

力扣_2389. 和有限的最长子序列

力扣_2389. 和有限的最长子序列 给你一个长度为 n 的整数数组 nums &#xff0c;和一个长度为 m 的整数数组 queries 。 返回一个长度为 m 的数组 answer &#xff0c;其中 answer[i] 是 nums 中 元素之和小于等于 queries[i] 的 子序列 的 最大 长度 。 子序列 是由一个数组…...

UI设计从入门到进阶,全能实战课

课程内容&#xff1a; ├── 【宣导片】从入门到进阶!你的第一门UI必修课!.mp4 ├── 第0课&#xff1a;UI知识体系梳理 学习路径.mp4 ├── 第1课&#xff1a;IOS设计规范——基础规范与切图.mp4 ├── 第2课&#xff1a;IOS新趋势解析——模块规范与设计原则(上).mp4…...

Formality:等价性检查的流程与模式(Guide、Setup、Preverify、Match与Verify)

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 等价性检查的流程 图1概述了使用Formality进行等效性检查的具体步骤。 图1 等价性检查流程 启动Formality(Start Formality) 要启动Formality&#xff0c;请…...

【Linux】————(日志、线程池及死锁问题)

作者主页&#xff1a; 作者主页 本篇博客专栏&#xff1a;Linux 创作时间 &#xff1a;2024年11月29日 日志 关于日志&#xff0c;首先我们来说一下日志的作用&#xff0c; 作用&#xff1a; 问题追踪&#xff1a;通过日志不仅仅包括我们程序的一些bug&#xff0c;也可以在…...

【自动化】配置信息抽取

公共基本信息配置文件抽取 公共基本信息比如卖家、买家、管理员&#xff0c;验证码等基本信息&#xff0c;再比如数据库、redis、各个服务的域名&#xff0c;这些目前是写死在代码之中的&#xff0c;为了能够更好的维护他们&#xff0c;我们将他们放入配置文件进行管理 公共的…...

Python毕业设计选题:基于django+vue的校园影院售票系统

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 影院信息管理 电影类型管理 电影信息管理 系统…...

Docker化部署Flask:轻量级Web应用的快速部署方案

Flask是一个用Python编写的轻量级Web应用框架&#xff0c;以其简洁性和灵活性而受到开发者的喜爱。Docker作为一种流行的容器化技术&#xff0c;为应用的部署和管理提供了极大的便利。本文将探讨Flask的优点、Docker部署的好处&#xff0c;并详细介绍如何将Flask应用Docker化部…...

centos怎么通过docker安装一个gitlab

在CentOS上通过Docker安装GitLab的步骤如下&#xff1a; 安装Docker引擎&#xff1a; 首先&#xff0c;需要在你的CentOS系统上安装Docker。可以通过以下命令来安装Docker&#xff1a;yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/lin…...

docker 运行my-redis命令

CREATE TABLE orders ( order_id bigint NOT NULL COMMENT "订单ID", dt date NOT NULL COMMENT "日期", merchant_id int NOT NULL COMMENT "商家ID", user_id int NOT NULL COMMENT "用户ID", good_id int NOT NULL COMMENT "商…...

qt6.4.0+visual studio2022+opencv

qt6.4.0visual studio2022opencv 补充&#xff1a;在安装完Qt后还需要配置环境变量...

23种设计模式之适配器模式

目录 1. 简介1.1 定义1.2 结构和组成部分 2. 代码2.1 MediaPlayer2.2 AdvanceMediaPlayer2.3 VicPlayer2.4 Mp4Player2.5 MediaPlayerAdapter2.6 AudioPlayer2.7 Test 3. 适用场景4. 优点和缺点5. 总结 1. 简介 1.1 定义 适配器模式&#xff08;Adapter Pattern&#xff09;是…...

剖析go协程池实现原理

go协程池实现 在go语言编程中有一种池肯定避免不了&#xff0c;那就是-协程池&#xff0c;无论你是日常工作还是面试中面试官都无法避免协程池&#xff0c;掌握协程池你也就算是入门go的并发编程了&#xff0c;打一波广告后面会有专门的文章来介绍如何在go中进行并发编程。 协…...

渗透测试--Linux上获取凭证

在测试过程中我们也会发现一些Linux主机加域的情况&#xff0c;虽然不多见&#xff0c;但它确实存在。正所谓技多不压身&#xff0c;这样能够触类旁通的知识&#xff0c;我们怎能错过&#xff0c;所以在此我们将会主要探讨从Linux主机上获取域凭证的方法。主要有以下内容&#…...

【笔记】自动驾驶预测与决策规划_Part9_数据驱动前沿算法与发展趋势

文章目录 数据驱动前沿算法与发展趋势0. 前言1. 端到端自动驾驶引言2. 端到端自动驾驶2.1 端到端自动驾驶早期尝试 ALVINN2.2 基于模仿学习的端到端系统 NVIDIA-E2E2.3 基于强化学习的端到端系统2.4 多模态融合的自动驾驶 Transfuser2.5 模块化端到端 UniAD2.6 模块化端到端 VA…...

工业公辅车间数智化节能头部企业,蘑菇物联选择 TDengine 升级 AI 云智控

小T导读&#xff1a;在工业节能和智能化转型的浪潮中&#xff0c;蘑菇物联凭借其自研的灵知 AI 大模型走在行业前沿&#xff0c;为高能耗设备和公辅能源车间提供先进的 AI 解决方案。此次采访聚焦于蘑菇物联与 TDengine 的合作项目&#xff0c;通过 AI 云智控平台的建设&#x…...

【Linux】开启你的Linux之旅:初学者指令指南

Linux相关知识点可以通过点击以下链接进行学习一起加油&#xff01; 在 Linux 开发中&#xff0c;GDB 调试器和 Git 版本控制工具是开发者必备的利器。GDB 帮助快速定位代码问题&#xff0c;Git 则提供高效的版本管理与协作支持。本指南将简明介绍两者的核心功能与使用技巧&…...

Vite 6.0 发布:引领现代前端开发新方向

Vite 6.0 带来了大量更新与优化&#xff0c;旨在简化开发流程、提升性能&#xff0c;并解决现代 Web 开发中的诸多挑战。本次更新引入了 实验性环境 API 和现代化的工具链&#xff0c;进一步巩固了 Vite 作为开发者首选工具的地位。以下是关于新特性、生态发展以及重要更新的全…...

深入了解阿里云 OSS:强大的云存储解决方案

在现代互联网应用中&#xff0c;数据存储是一个不可忽视的环节。随着数据量的不断增长&#xff0c;传统的存储方式已经无法满足高速、低成本、大容量的需求。阿里云 OSS&#xff08;对象存储服务&#xff09;作为一种高性能、低成本且具备高度扩展性的云存储服务&#xff0c;已…...

canvas绘制网络地址图片

canvas在绘制网络地址图片时&#xff0c;需要先下载成临时路径 export function downLoadBgImg (url) {return new Promise((r,j) > {uni.downloadFile({url,success : res > {if (res.statusCode 200) {r(res.tempFilePath);return;};j(依赖文件下载失败);},fail : er…...

《DSL-FIQA》论文翻译

《DSL-FIQA: Assessing Facial Image Quality Via Dual-Set Degradation Learning and Landmark-Guided Transformer》 原文链接&#xff1a;DSL-FIQA: Assessing Facial Image Quality via Dual-Set Degradation Learning and Landmark-Guided Transformer | IEEE Conference…...

【Linux网络编程】第四弹---构建UDP服务器与字典翻译系统:源码结构与关键组件解析

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、UdpServer.hpp 1.1、函数对象声明 1.2、Server类基本结构 1.3、构造函数 1.4、Start() 2、Dict.hpp…...

【人工智能】人工智能,深度学习与人工神经网络

人工智能 人工智能一、定义与核心要素二、主要方法与技术三、应用领域四、发展前景与挑战五、分类六、研究目标与价值 深度学习定义与核心思想网络结构工作原理关键技术与模型应用领域发展与挑战 人工神经网络一、定义与原理二、基本特性三、网络结构四、工作原理五、应用领域六…...

嵌入式系统应用-LVGL的应用-平衡球游戏 part2

平衡球游戏 part2 4 mpu60504.1 mpu6050 介绍4.2 电路图4.3 驱动代码编写 5 游戏界面移植5.1 移植源文件5.2 添加头文件 6 参数移植6.1 4 mpu6050 4.1 mpu6050 介绍 MPU6050是一款由InvenSense公司生产的加速度计和陀螺仪传感器&#xff0c;广泛应用于消费电子、机器人等领域…...

Linux网络编程之---多线程实现并发服务器

下面我们来使用tcp集合多线程实现并发服务器 一.服务端 #include <stdio.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <pthread.h>typedef struct sockinfo {char ip[16];unsigne…...

架构师的英文:Architect

中文版 软件架构师 的英文是 “Software Architect”。 Software: 软件Architect: 架构师&#xff0c;通常指的是设计和规划某种系统或结构的人。 Software Architect 通常负责软件系统的整体设计、技术选型、架构规划&#xff0c;确保系统的可扩展性、可维护性和高效性等。…...

量化交易系统开发-实时行情自动化交易-8.7.文华平台

19年创业做过一年的量化交易但没有成功&#xff0c;作为交易系统的开发人员积累了一些经验&#xff0c;最近想重新研究交易系统&#xff0c;一边整理一边写出来一些思考供大家参考&#xff0c;也希望跟做量化的朋友有更多的交流和合作。 接下来会对于文华平台介绍。 文华财经…...

【前端】JavaScript 中的创建对象模式要点

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;对象属性值中的引号规则&#x1f4af;对象属性换行与尾随逗号的使用&#x1f4af;工厂模式&#xff1a;灵活高效的对象创建&#x1f4af;自定义构造函数&#xff1a;通过…...

鸿蒙NEXT元服务:论如何免费快速上架作品

【引言】天下武功&#xff0c;唯快不破。 本文讨论如何免费且以最快速度上架自己的作品。 作者以自己从零开始到提交发布审核一共俩小时的操作流程分享给大家作参考。 【1】立项选择 结论&#xff1a;元服务&#xff0c;单机&#xff0c;工具类&#xff08;非游戏&#xff…...

hive3.1.3安装及基本例子

前提要安装好hadoop环境和mysql。 1、下载并解压 https://archive.apache.org/dist/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz 下载bin包到/app/src中。 cd /app/src/ tar zxvf apache-hive-3.1.3-bin.tar.gz mv apache-hive-3.1.3-bin /app/hive2、配置path nano /etc…...

【设计模式】工厂方法模式 在java中的应用

文章目录 1. 引言工厂方法模式的定义 2. 工厂方法模式的核心概念工厂方法模式的目的和原理与其他创建型模式的比较&#xff08;如简单工厂和抽象工厂&#xff09; 3. Java中工厂方法模式的实现基本的工厂方法模式结构示例代码&#xff1a;创建不同类型的日志记录器 4. 工厂方法…...

【热门主题】000079 服务器虚拟化:开启高效计算新时代

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【热…...

软考高项经验分享:我的备考之路与实战心得

软考&#xff0c;尤其是信息系统项目管理师&#xff08;高项&#xff09;考试&#xff0c;对于众多追求职业提升与专业认可的人士来说&#xff0c;是一场充满挑战与机遇的征程。我在当年参加软考高项的经历&#xff0c;可谓是一波三折&#xff0c;其中既有成功的喜悦&#xff0…...

【小白学机器学习38】用np.random 生成各种随机数,随机数数组/序列

目录 0 总结 np.random() 的一些点 1 用np.random.random() 生成[0,1) 区间内的随机数 2 生成指定范围内的随机整数/数组 np.random.randint() 3 用np.random.choice()生成指定数组范围内的随机数 3.1 np.random.choice(array6) 3.2 np.random.choice(array6) &#xff0…...

Scala的数组匹配模式

package Test32//匹配&#xff1a;数组&#xff1a;元素的个数 元素的特征 object Test4 {def main(args: Array[String]): Unit {val arr1 Array(1, 2, 3)val arr2 Array(0, 2, 3)val arr3 Array(1, 2, 3, 4)val arr4 Array(-1, 1, 2, 3, 4)val b: Any arr1b match {ca…...

力扣【算法学习day.50】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非…...