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

c++ STL---vector使用

  本文对STL---中的vector的使用是参考网站 vector - C++ Reference  的内容,该网站是外文的哦,大家可以尝试打开看看更深刻的理解。本文是抽取其中常使用,然后加上自己的是理解哦。

        前言

   vector其实是顺序表类模板的封装啊! 数据结构学的不好,那简单来说就是数组的封装。

    if 你想懂一个人,你先得了解它的心啊,同样的你想了解vetor,你得从它的成员变量和成员函数开始了解,这里的c++网站做了一个分类。

 成员变量

  我们后面模拟实现, 如下成员变量  

 成员函数:

    构造

迭代器:

容量相关:

修改:

一.构造 

   这里涉及到了空间配置器的我们都忽略,本文不讲 就是上面的allocator, 

       1.无参构造

2. vector( size大小,val 初始化的值)

    你细心可以发现这里使用的值是value_type()这是因为你可能啊写了一个vector内部嵌套了一个自定义类型,比如vector嵌套vector这就很正常啊 。

3. 用迭代器进行构造赋值

4. 拷贝构造

vector<int> v4(str.begin(), str.end());

vector<int> v5(v4);

  自行可以用下面这个函数进行学习相关构造。

void test_vector1()
{// 构造vector<int> v1;// 无参构造vector<int> v2(10, 0);// size_t size T& T()  一个是个数 一个是初始值 vector<int> v3(v2.begin(), v2.end());// 用迭代器去初始化string str("hello world");vector<int> v4(str.begin(), str.end());vector<int> v5(v4);// 使用下标访问内容for (size_t i = 0; i < v3.size(); i++){cout << v3[i] << " ";}cout << endl;// 创建一个迭代器 //vector<int>::iterator it = v4.begin();auto it = v4.begin();while (it != v4.end()){cout << *it << " ";++it;}cout << endl;for (auto e : v5){cout << e << " ";}cout << endl;
}

二.迭代器

2.1 迭代器-- begin()和end()

  我们这里的迭代器使用主要是正向迭代器,其实也没有很多内容需要说了,后面我们模拟实现的话,会有一些地方比如考虑到迭代器失效的原因啊。 

    我们主要用迭代器进行一个变量,访问得到vector中的值。 

      这里的vector正向的主要介绍  verctor中的 end() 返回迭代器指向的末尾元素的下一个内容,注意这里是一个内容哦而不是末尾元素。所以遍历的时候的遍历条件参考下面代码。 至于begin()当然指向的是第一个元素啦。

    对于vector中,你可以认为这里的iterator底层实现其实是用的指针。这样你就会更深刻的理解了

2.2 获取迭代器 以及遍历

     获取迭代器,从一个实例化中的vector中获取一个迭代器,参考如下代码,主要是注意写好类型吧;

vector<int> v1(10,2);
vector<int>::iterator it = v1.begin();
auto it = v1.begin();// 有时候感觉变量类型有点长 可以直接用auto // 遍历 
while (it != v1.end())
{cout << *it << endl; // 你看你理解它是一个指针的话 那 *it访问内容// 下一个元素遍历就要进行it++it++;}

   三.容量

   3. 1 size()

   size----》返回当前容器元素个数,注意返回值是无符号整形  unsigned integral type。

3.2  max_size()

   个人认为,不喜勿喷,其实max_size()没什么用,至少对我们日常使用来说,但是它的内容值得我们去了解。

   max_size()主要是访问当前vector能达到理论大小的个数你看我这里写了一个v1 然后调用它的max_size() 这么大,对于它的解释这么说,因为它实际大小其实受到系统和库的约束等等,所以这个值是不一定精准的。哈哈哈哈。


 为什么要实例化模板还要用对象来调用它

  其实我有一个疑问的但是刚刚问了ai解决了, 我想的是一个vector的容器个数大小,那顶多跟他实例化模板的类型有关就比如vector<int> 跟

vector<double> 他们大小不一样对应的个数肯定不同了。 但是不然

   不知道你怎么想,就是因为,这个max_size()的计算还受到当前容器的指针啊,以及内存啊,等等都受到约束。

 3.3 resize()

  • 若 n 小于当前容器大小,则内容缩减至前 n 个元素,删除超出部分(并销毁它们)。
  • 若 n 大于当前容器大小,则通过在末尾插入所需元素扩展内容至 n 个。若指定 val,新元素初始化为 val 的副本;否则执行值初始化。
  • 若 n 同时大于当前容器容量,将自动重新分配存储空间。

注意:该函数通过插入或删除元素直接修改容器的实际内容

   代码学习参考下面

 我这里搞了一个小聪明,转牛角尖,但是我们深挖我们的底层跟定义,说的很清楚了,如果啊你n

<size我这个val几乎无用我只会保留前n个

vector<int> v1;
for (int i = 0;i < 10 ;i++)
{v1.push_back(i*10);
}
// resize(n) 比他小 我们就 缩短到前n个
// m大于当前 size 就 插入 如果指定了 val从末尾插入n个val
// 大于容器大小了 会基于上一步 并且 重新指定内存
for (auto e : v1)
{cout << e << " ";
}
cout << endl;v1.resize(2);// 变小相当于删除 
for (auto e : v1)
{cout << e << " ";
}
cout << endl;v1.resize(15);// 变小相当于删除  不指定  对插入的值都初始化0 否则 初始化为val
for (auto e : v1)
{cout << e << " ";
}// 我想搞鬼 你看看这个 
/*v1.resize(2,2);
for (auto e : v1)
{cout << e << " ";
}*/

3.4 reserve() 与resize() 一对欢喜冤家啊

    reserve 本义是保存 和更新的意思,它在这里做到底是上面目的呢,很简单啊,就是更新它的内存。它主要跟容量有关,正常情况不会跟resize一样去影响size,比容量大的话它就主要改变容量大小,然后重分配内存。

  • 若 n 大于当前向量容量,该函数会使容器重新分配存储空间,将容量增加至 n(或更大)。
  • 其他情况下,函数调用不会导致重新分配,vector容量不受影响。

此函数对vector大小无影响,也不会修改其元素。

    若 n 小于当前 size()reserve 不会触发任何操作,因为条件 if (n > capacity()) 不成立。这符合标准库行为:reserve 仅在请求容量大于当前 capacity() 时重新分配内存,从不缩减容量。若。

   区分reserve 和resize()

    1. resize(n) 针对 size(n) 会改变容器内size的个数甚至是大小 通过使用插入删除真正的改变其中的内容, 特别的区别就是 当n大于size的时候相当于插入啊它可以根据你补充的val去初始化值。   说白了,n>capacity 会进行插入值 且重分配内存。 n<size了 会调用easer()对容量进行删减size但是capacity不会变保持缩减只缩小size的原则

 2.resever 它其实初衷是为了更新内存扩大内存,从来不缩减内存。

3.5 shrink_to_fit 注意这是 11以后的版本 

 

   其实它是为了改变capacity来的,还记得我们的resize和reserve吗 resize,缩小的时候不改变capcity啊 reserve只用于扩容啊。 那谁来调节容量呢 所以 11以后就搞了一个这个。

    但是它是请求容器改变容量大小哈然后适应它的size。

// vector::shrink_to_fit
#include <iostream>
#include <vector>int main ()
{std::vector<int> myvector (100);std::cout << "1. capacity of myvector: " << myvector.capacity() << '\n';myvector.resize(10);std::cout << "2. capacity of myvector: " << myvector.capacity() << '\n';myvector.shrink_to_fit();std::cout << "3. capacity of myvector: " << myvector.capacity() << '\n';return 0;
}

3.6 empty()

    返回当前容器元素是不是为空   bool类型。

四. 元素获取  

4.1 operator[ ]  

  作用,通过下标返回指定元素的引用

     这里其实用起来就让你感觉跟数组一样非常方便哈 , 值得一提的是,它跟std::vector at 的功能非常类似,也是通过下标来访问内容,但是呢,at更好吧,因为它会有边界检测,并且抛异常检测,防止你运行时发生越界从而照成段错误使得访问越界的问题。

4.2 at()

    使用举个例子吧。

  注意:  段错误是程序运行时操作系统层面的错误,属于崩溃级问题,会直接终止程序并可能丢失数据。而边界检查抛异常(如out_of_range)是程序可控的错误处理机制,允许开发者通过try-catch捕获异常并执行恢复逻辑(如提示用户、回滚操作等),相比段错误更具鲁棒性,能让程序在异常情况下保持可控,而非直接崩溃。

  用 [] 访问会报段错误,

at对应的情况

    这就是抛异常的好处啊。

4.3 front()与back()

   返回容器中第一个元素的引用。

      翻译: 它不向begin(),它返回的是一个迭代器啊,(这里的迭代器我们底层可以认为它其实就是一个指针啊), 这个函数是返回一个之间的引用,注意得到了引用我们可以修改它对应的内容。

 back()与它类似。

参考学习代码如下:

// vector::front
#include <iostream>
#include <vector>int main ()
{std::vector<int> myvector;myvector.push_back(78);myvector.push_back(16);// now front equals 78, and back 16myvector.front() -= myvector.back();std::cout << "myvector.front() is now " << myvector.front() << '\n';return 0;
}

 

4.4 data()

   

      返回一个指向内存数组的指针,这个内存数组是vector存放元素的。

    为什么呢? 因为元素在vector中必然顺序存储的,所以我们可以通过指针在利用偏移量访问在数组中任意的一个元素。

 

五 修改 

5.1 assign

   1. assign:在调用之前会把之前容器中的元素全部销毁掉,并且会分配新的内容,以及根据实际的size 更改当前的容量。

 2. 当且仅当新的的vector的size 大于原来的capacity才会重新分配内存。

 使用 

void myvector_modify()
{vector<int> v1(5, 1);// assign(n,val()) 一个是 n个 和 val值 v1.assign(10,99);for (auto e : v1){cout << e << " ";}cout << endl;vector<int> v2;// 用迭代器去 重分配其中的内容v2.assign(v1.begin()+1,v1.end());for (auto e : v2){cout << e << " ";}}

5.2 push_back() 和 pop_back()

    尾插和尾删,使用很简单的。

5.3 insert

  使用方式

1.  指定位置插入 元素 (pos,val())

                  2. 指定位置开始 插入n个val元素   (pos,size(),val)

                     3. 范围for插入   (pos,first,last)    

      大意:1.vector是通过在指定pos位置插入进行拓展的,有效的增加了容器的size。

2.    当且仅当这个新的vector的size大于当前容器的capacity会进行内存的重分配

3.因为vector的底层是数组,插入位置,出来插入末尾元素效率很高外,插入其他位置比如中间位置的效率是很低的(同样的操作比起其他的容器比如list(链表)),因为它需要把pos后面的元素一个一个进行移动啊。 

  使用实例代码:

	vector<int> v1;v1.push_back(2);v1.push_back(3);v1.push_back(4);v1.push_back(5);vector<int> v2;v2.push_back(10);v2.push_back(9);v2.push_back(10);v2.push_back(10);v2.push_back(10);vector<int>::iterator it = v2.begin();// 指定位置插入一个值 v2.insert(it+2,999);// 指定位置插入 而且 插入了3个 val值v2.insert(it+2,3,999);for (auto e : v2){cout << e << " ";}// 迭代器插入 cout << endl;v2.insert(v2.begin(),v1.begin()+2,v1.end());for (auto e : v2){cout << e << " ";}//从这个begin位置开始插入 也就是从头部开始 

5.4 eraser 

     1. 移除指定位置的元素

     2. 通过迭代器移除一个range范围的元素

   3. 这可以有效的删除容器的指定元素,减小size 同时呢销毁指定位置的元素不仅仅是被覆盖还会调用它的析构(后期底层实现我们说一下)

4. 再次提及效率问题,底层是数组嘛,所以删除中间位置的自然效率挺低的。 

5.5 clear()

1. 它这么说 这里的clear会把vector的全部元素移除掉,让size变成0但是capacity是不一定,以及内存的重分配也不一定发生。所以它建议用下面那个访问来代替,

   写了一个匿名对象 vector<T>() 然后把他跟原本的vector互换这样,互换以后,新的内存指向给我们的vector,原本的内存被匿名对象结束后调用它的析构被销毁。 这个想法是很经典的哈 后面模拟底层实现的时候我们会提及的哦。

5.6 swap()

将当前容器的内容与另一个同类型vector对象 x 的内容进行交换,两者的大小可以不同。

  调用此成员函数后,当前容器中的元素变为调用前 x 中的元素,而 x 中的元素则变为调用前当前容器中的元素。所有迭代器、引用和指针对于被交换的对象仍然有效。

注意,存在一个同名的非成员函数 swap,其对该算法进行了重载,优化后的行为与本成员函数一致。

显然这是把他们vector指向内存的指针进行了互换 参考如下代码:

  

int main()
{std::vector<int> foo(3, 100);   // three ints with a value of 100std::vector<int> bar(5, 200);   // five ints with a value of 200foo.swap(bar);std::cout << "foo contains:";for (unsigned i = 0; i < foo.size(); i++)std::cout << ' ' << foo[i];std::cout << '\n';std::cout << "bar contains:";for (unsigned i = 0; i < bar.size(); i++)std::cout << ' ' << bar[i];std::cout << '\n';return 0;
}

六 关于插入 capacity的变化 以及eraser涉及到的迭代器失效问题

   6.1 capacity 

  

 我这是 vs2020编译器下的情况: 

 这个扩容的情况 前面几个都是很小的扩容的哈,导论后面差不多一倍作用,不同的编译器下这个扩容是不一样的。gcc就是 2倍扩容的。

6.2  eraser涉及到的迭代器失效问题

   这是 一个很经典的问题 

   删除指定元素 val  在std库中的 vector的迭代器它会帮你 对应一律用过的iterator它默认为失效了不准你再用哦。 后期我们实现我们也会发现其中更深的逻辑。

void eraser_spevar()
{int key = 2;vector<int> v1;v1.push_back(2);v1.push_back(2);v1.push_back(1);v1.push_back(3);v1.push_back(3);v1.push_back(3);v1.push_back(3);v1.push_back(2);v1.push_back(123);v1.push_back(14);v1.push_back(15);auto it = v1.begin();while (it != v1.end()){if (*it == key)v1.erase(it);it++;}}

相关文章:

c++ STL---vector使用

本文对STL---中的vector的使用是参考网站 vector - C Reference 的内容&#xff0c;该网站是外文的哦&#xff0c;大家可以尝试打开看看更深刻的理解。本文是抽取其中常使用&#xff0c;然后加上自己的是理解哦。 前言 vector其实是顺序表类模板的封装啊&#xff01; 数据结构…...

windows标题栏显示奇怪的蓝色,怎么解决

背景 如下&#xff0c;非常奇怪&#xff0c;如果窗口是active状态就是蓝色的&#xff0c;为什么&#xff1f; 如果你遇到上述问题&#xff0c;可以这么解决&#xff1a; 右键点击桌面&#xff0c;选择 “个性化”&#xff0c; 滚动到下面&#xff0c;看到 “标题栏和窗口边…...

Kafka存储设计深度剖析:日志、索引与文件管理的底层奥秘

引言 在分布式消息系统领域&#xff0c;Kafka凭借卓越的性能与高可靠性占据重要地位&#xff0c;而这一切都离不开其精妙的存储设计。从消息的持久化存储到高效检索&#xff0c;从日志分段管理到数据清理策略&#xff0c;Kafka的存储架构设计巧妙&#xff0c;能够支撑海量消息…...

将多个Excel合并到一个Excel中的方法

今天遇到这么一个问题&#xff0c;需要将多个Excel表格中的数据汇总表&#xff0c;合并在一个Excel中&#xff0c;并且显示一致。 因此编写了以下代码来解决这个问题&#xff0c; 1.在Excel中按AltF11&#xff0c;快速调出命令控制台 2.工具栏选择插入——模块——将以下脚本…...

Debian配置Redis主从、哨兵

前言 Redis的下载安装可参考Centos安装配置Redis6.x&#xff0c;Centos和Debian的步骤基本类似&#xff0c;或自行在网上搜索相关资料 注意&#xff1a;远程连接需放开相应端口 主从 搭建一个一主二从的主从模式 处理conf文件 #进入redis所在目录 cd /tools/redis/redis6 …...

OpenSSL引擎 + PKCS11 + SoftHSM2认证

OpenSSL引擎 PKCS11 SoftHSM2 前言&#xff1a;金融级安全的基石 在金融、军工等高安全领域&#xff0c;硬件安全模块&#xff08;HSM&#xff09; 是保护加密密钥的黄金标准。本文将深度剖析HSM核心组件libpkcs11.so的工作原理&#xff0c;并手把手教你搭建基于SoftHSM2的…...

flex布局 项目属性

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>flex布局 项目属性</title> <link href"css/k.css" rel"stylesheet" /> </head> <bod…...

流水表延迟处理方案设计

**### 流水表延迟处理方案设计 针对你的场景&#xff08;流水表插入记录&#xff0c;当type4时需要1秒后处理&#xff09;&#xff0c;结合现有技术栈&#xff08;JDK8、MySQL、定时任务、Redis、RabbitMQ&#xff09;&#xff0c;我推荐以下几种可行方案&#xff1a; 一、方…...

密室出逃消消乐小游戏微信流量主小程序开源

这个密室出逃消消乐小游戏采用了微信小程序的标准目录结构&#xff0c;包含以下核心功能&#xff1a; 游戏界面&#xff1a;6x6 的网格布局&#xff0c;随机生成不同类型的物品 游戏逻辑&#xff1a;交换相邻物品&#xff0c;消除三个或以上相同类型的物品 计分系统&#xff1a…...

Docker 日志

Docker 日志是排查容器故障、监控运行状态的重要工具。下面从 日志查看命令、详解字段、日志驱动、最佳实践 四个方面给你详细解析。 一、最常用日志命令 1. 查看容器日志&#xff08;默认 stdout、stderr&#xff09; docker logs <container_name|container_id>2. 实…...

嵌入Linux快速入门第3篇

01_嵌入式Linux开发环境介绍 在Windows环境下的操作&#xff1a; 02_配置VMware使用双网卡之NAT网卡 虚拟机内部有两个网卡&#xff0c;一个是NAT网卡&#xff0c;另外一个是桥接网卡。NAT网卡用来保证Ubuntu可以上网&#xff0c;桥接网卡用来保证Ubuntu可以和开发板进行数据…...

详解鸿蒙Next仓颉开发语言中的全屏模式

大家好&#xff0c;今天跟大家分享一下仓颉开发语言中的全屏模式。 和ArkTS一样&#xff0c;仓颉的新建项目默认是非全屏模式的&#xff0c;如果你的应用颜色比较丰富&#xff0c;就会发现屏幕上方和底部的留白&#xff0c;这是应用自动避让了屏幕上方摄像头区域和底部的导航条…...

Oracle/MySQL/SqlServer/PostgreSQL等数据库的数据类型映射以及各版本数据类型情况说明

1 引言 近期工作聚焦于跨数据库系统的数据类型兼容性研究&#xff0c;旨在解决多源异构数据迁移、系统集成及版本升级中的类型映射难题。具体任务包括&#xff1a;1&#xff09;建立主流数据库&#xff08;如MySQL、Oracle、PostgreSQL、SQL Server等&#xff09;的数据类型映射…...

新生活的开启:从 Trae AI 离开后的三个月

很久没有写文章了&#xff0c;想借着入职新公司一个月的机会&#xff0c;和大家唠唠嗑。 离职 今年2月份我从字节离职了&#xff0c;结束了四年的经历&#xff0c;当时离开的核心原因是觉得加班时间太长了&#xff0c;平均每天都要工作15&#xff0c;16个小时&#xff0c;周末…...

背包问题概论(01背包,完全背包,多重背包)DP

背包问题概论&#xff08;01背包&#xff0c;完全背包&#xff0c;多重背包&#xff09;DP 背包问题一种经典的组合优化问题&#xff0c;主要用于在有限的容量下选择物品以最大化总价值。它分为几种类型&#xff1a;   ①&#xff1a;0/1背包问题&#xff1a;每种物品只能选择…...

攻克SQL审核“最后堡垒”!PawSQL首发T-SQL存储过程深度优化引擎

为什么存储过程审核那么难&#xff1f; 存储过程将数据操作逻辑固化在数据库层&#xff0c;一次编译、多次执行&#xff0c;既能大幅提升性能&#xff0c;也能通过权限隔离增强安全。然而&#xff0c;正因其逻辑复杂、分支众多&#xff0c;存储过程内部的 SQL 审核与优化常常成…...

Stable Diffusion 实战-手机壁纸制作 第二篇:优化那些“崩脸”和“马赛克”问题,让图像更加完美!

欢迎回来!在《StableDiffusion实战-手机壁纸制作》系列的第一篇中,我们成功完成了基础操作,制作出了令人炫目的手机壁纸。 今天,我们将进入一个更高阶的领域——优化处理。因为谁不想让生成的艺术品更完美呢?尤其是避免“崩脸”和“马赛克”这种让人抓狂的问题! 创作的路…...

Kafka消费者客户端源码深度解析:从架构到核心流程

在Kafka生态系统中&#xff0c;消费者客户端作为数据消费的入口&#xff0c;其设计与实现直接影响数据处理的效率和可靠性。本文将深入Kafka消费者客户端源码&#xff0c;通过核心组件解析、流程拆解与源码分析&#xff0c;揭示其高性能消费背后的技术奥秘&#xff0c;并辅以架…...

Linux进程间通信:从入门到精通(2)

嘿&#xff0c;小伙伴&#xff01;今天我们来聊聊Linux系统中一个超级重要的话题——进程间通信&#xff08;IPC&#xff09;。看到"进程间通信"这个词&#xff0c;别急着打哈欠&#xff0c;这可是Linux内核中的"社交达人"&#xff0c;让进程们能够愉快地交…...

从源码到生产:Apache 2.4.57 自动化安装实战指南(附脚本)

引言&#xff1a;为何选择源码安装 Apache&#xff1f; 在服务器运维场景中&#xff0c;源码编译安装 Apache HTTP Server 是实现精细化配置的重要方式。相比包管理器安装&#xff0c;源码安装可自定义模块组合、适配特定依赖环境&#xff0c;并精确控制版本。本文将通过自动化…...

CMake实践:指定gcc版本编译和交叉编译

目录 1.指定gcc版本编译 1.1.通过CMake参数来实现 1.2.使用 RPATH/RUNPATH 直接指定库路径 1.3.使用符号链接和 LD_LIBRARY_PATH 1.4.使用 wrapper 脚本封装 LD_LIBRARY_PATH 2.交叉编译 2.1.基本用法 2.2.工具链文件关键配置 2.3.多平台工具链示例 2.4.注意事项 2.…...

【MySQL基础】MySQL内置函数全面解析:提升你的数据库操作效率

MySQL学习&#xff1a; https://blog.csdn.net/2301_80220607/category_12971838.html?spm1001.2014.3001.5482 前言&#xff1a; MySQL提供了丰富的内置函数来帮助开发者高效地处理数据。这些函数覆盖了字符串操作、数值计算、日期时间处理、流程控制等多个方面。本文将全面…...

OpenCV CUDA模块设备层-----在GPU上计算两个uchar1类型像素值的反正切(arctangent)比值函数atan2()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 对输入的两个 uchar1 像素值 a 和 b&#xff0c;先分别归一化到 [0.0, 1.0] 浮点区间&#xff0c;然后计算它们的 四象限反正切函数。 函数原型…...

unity 半透明描线shader

效果如图 Shader "Custom/TransparentWithOutline_Fixed" {Properties{// 主材质属性_Color ("Main Color", Color) (1,1,1,1)_MainTex ("Base (RGB) Trans (A)", 2D) "white" {}_Glossiness ("Smoothness", Range(0,1)…...

react中使用antd的form表单去受控switch时初始值没有正确显示

解决方案 antd内api中有valuePropName熟悉 只需正常绑定当前元素触发事件即可...

01__QT的背景介绍和工程创建

一、QT软件的安装 1、qt的背景介绍 Qt 是一个跨平台的 图形界面库&#xff08;重量级&#xff09;&#xff0c;1994年由罗威troll tech公司出品&#xff0c;它集成了网络、数据库、串口通信协议&#xff08;RS232&#xff0c;蓝牙&#xff0c;NFC&#xff09;、打印、PDF生成…...

Java Map 深度解析

一、HashMap 底层实现详解 1. 核心数据结构 HashMap 在 JDK 8 中的底层结构是 数组 链表 红黑树&#xff0c;其核心成员变量包括&#xff1a; transient Node<K,V>[] table;&#xff1a;哈希桶数组transient int size;&#xff1a;实际键值对数量int threshold;&…...

异地组网工具

目前手头上两台服务器&#xff08;一台主力&#xff0c;一台有gpu用来跑点深度学习任务&#xff09;&#xff0c;两台pc&#xff08;一台是主力&#xff0c;一台是便携碎片化时间随时赶工用&#xff09;&#xff1b; 之前组网的时候&#xff0c;用zerotiertailscale&#xff0…...

我们为什么要模拟

大约 25 年前&#xff0c;当我开始从事高速 PCB 设计时&#xff0c;速度很慢&#xff0c;层数少&#xff0c;介电常数和损耗角正切很高&#xff0c;设计裕量很宽&#xff0c;铜粗糙度无关紧要&#xff0c;玻璃编织样式也无关紧要。我们称电介质为“FR-4”&#xff0c;它们的特性…...

MySQL 三大日志:Redo、Undo 与 Binlog 详解

写在前面 关于三大日志&#xff0c;博主看了无数视频和文章&#xff0c;也是总结的非常精辟了&#xff01; 在 MySQL 数据库的运行机制中&#xff0c;Redo Log、Undo Log 和 Binlog 起着至关重要的作用&#xff0c;它们各司其职&#xff0c;共同保障数据库的数据安全、事务一…...

JMeter-SSE响应数据自动化3.0

背景 此次因为多了一些需要过滤排除的错误(数量很少)&#xff0c;还需要修改下JMeter的jtl文件输出数据&#xff08;后续统计数据需要&#xff09; 所以只涉及到JSR脚本的一些改动(此部分改动并不会影响到JMeter的HTML报告) 改动 主要通过设置JMeter中prev输出数据变量threadN…...

C#上位机通过WebApi访问WinCC

在智能工厂架构中&#xff0c;WinCC作为SCADA一级&#xff0c;负责着与上级MES和下级PLC及其他现场组件的联系。与下层通信&#xff0c;WinCC支持S7、MC、Modbus TCP、OPC等多种接口和协议。对上层通信&#xff0c;WinCC从7.5 SP2开始支持REST Api这种Web接口方式。 今天跟大家…...

【深度学习新浪潮】什么是端侧AI?

什么是端侧AI? 端侧AI的定义 端侧AI(Edge AI)是指在终端设备(如手机、智能家居、穿戴设备等)本地运行的人工智能技术,无需将数据上传至云端服务器,直接在设备端完成数据处理、模型推理和决策。其核心优势在于低延迟、高隐私性、减少网络依赖,尤其适合对实时性和数据安…...

Postman 的 Jenkins 管理 - 自动构建

目录 一、环境准备 创建 Postman 集合和环境 二、postman Postman 集合和环境并导出 1. 打开已完成并测试无误的 postman 项目脚本。 再次执行测试。 ​编辑​2. 导出&#xff08; 测试用例集、环境变量 两个文件&#xff09;**“不 支 持 中 文”** —— 全部改成英文&a…...

HomeBrew MAC PRO 安装教程

1、检查xcode工具 这个东西一般是有的&#xff0c;命令后输入以下内容即可 xcode-select --install如安装&#xff0c;结果为&#xff1a; 2、安装HomeBrew 方式1&#xff08;推荐&#xff09; /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebr…...

多模态大语言模型arxiv论文略读(129)

Task Success Prediction for Open-Vocabulary Manipulation Based on Multi-Level Aligned Representations ➡️ 论文标题&#xff1a;Task Success Prediction for Open-Vocabulary Manipulation Based on Multi-Level Aligned Representations ➡️ 论文作者&#xff1a;M…...

Android 实现 Toast 显示重叠问题,有效提升用户体验

Android 实现 Toast 显示重叠问题 在 Android 开发中&#xff0c;Toast 是一个非常常用的提示工具&#xff0c;能够为用户提供短暂的信息展示。然而&#xff0c;Toast 的默认实现中&#xff0c;存在一个体验上的问题&#xff0c;当多次触发 Toast 显示时&#xff0c;会导致多个…...

Spring Boot + MyBatis + Vue:构建高效全栈应用的实战指南

一、项目需求分析 假设我们需要开发一个简单的任务管理系统&#xff0c;用户可以通过该系统创建、查看和删除任务。以下是项目的基本需求&#xff1a; 用户管理&#xff1a;用户可以注册和登录系统。 任务管理&#xff1a;用户可以创建、查看和删除任务。 数据持久化&#x…...

语音情感识别:CNN-LSTM 和注意力增强 CNN-LSTM 模型的比较分析

摘要: 语音情感识别 &#xff08;SER&#xff09; 技术可帮助计算机理解语音中的人类情感&#xff0c;这在推进人机交互和心理健康诊断方面占据了关键地位。本研究的主要目标是通过创新的深度学习模型提高 SER 的准确性和泛化性。尽管它在人机交互和心理健康诊断等各个领域都很…...

Cursor Pro取消500次请求限制,无限用的体验更好了吗?

目录 前言 一、发生了什么&#xff1f;从"限量"到"无限"的升级 1.1 "顶配" Ultra 套餐的登场 1.2 Pro 套餐的"静默升级" 1.3 新旧方案对比 二、"无限"背后的体验&#xff1a;一个开发者的真实感受 三、Cursor 为何要…...

视频汇聚EasyCVR平台v3.7.2发布:新增全局搜索、播放器默认解码方式等4大功能

EasyCVR视频汇聚平台带着全新的v3.7.2版本重磅登场&#xff01;此次升级&#xff0c;绝非简单的功能堆砌&#xff0c;而是从用户体验、操作效率以及系统性能等多维度进行的深度优化与革新&#xff0c;旨在为大家带来更加强大、稳定且高效的视频监控管理体验。 一、全局功能搜索…...

2025年AI热潮:开发一款聚合AI系统,包含AI对话、视频、数字人、办公、客服、剪辑为一体的ai智能系统有多强

前言&#xff0c;我们了解了网上比较火的ai平台&#xff0c;比如&#xff1a; 抖音豆包AI、百度AI、阿里巴巴AI、腾讯AI、华为AI、DeepSeek、ChatGPT、文心一言、通义千问 一、系统概述 本聚合AI系统是一个集AI对话、图片生成、视频生成、视频剪辑、数字人创作、音乐制作、办公…...

DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_项目里程碑示例(CalendarView01_22)

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

AWS数据库迁移实战:本地MySQL零停机上云方案

一、迁移场景 本地环境&#xff1a;自建MySQL 5.7&#xff08;数据量500GB&#xff09;&#xff0c;业务要求迁移停机时间<5分钟 目标架构&#xff1a; 二、迁移四步法 步骤1&#xff1a;环境准备&#xff08;耗时30分钟&#xff09; 1.1 创建Aurora MySQL # AWS CLI创…...

windows汇编

今天发现一个很好的视频&#xff0c;讲windows汇编/调试等。是个老太太讲的&#xff0c;但是讲的真好。 Create/Assemble/Link x64 Windows asm exe, Debugging Tools for Windows (WinDbg), stack shadow store. 照例边看边记录边实验。 1. install visual studio 2. instal…...

用 python 开发一个可调用工具的 AI Agent,实现电脑配置专业评价

在人工智能时代&#xff0c;AI Agent凭借其强大的任务处理能力&#xff0c;逐渐成为开发人员手中的得力工具。今天&#xff0c;我们就来一起动手&#xff0c;用Python打造一个能够调用工具的AI Agent&#xff0c;实现根据电脑信息对电脑配置进行专业评价的功能。 一、项目创建…...

Java自定义线程池(ThreadPoolExecutor)

Java线程池使用示例 下面将展示如何使用自定义线程池(ThreadPoolExecutor)来执行任务&#xff0c;包括提交Runnable任务、Callable任务&#xff0c;处理拒绝策略以及关闭线程池。 import java.util.concurrent.*;public class ThreadPoolDemo {// 自定义线程工厂&#xff08;…...

386. 字典序排数

386. 字典序排数 理解题目要求 题目要求我们生成从 1 到 n 的整数的字典序排列&#xff0c;并且要求&#xff1a; ​时间复杂度 O(n)​​&#xff1a;不能使用直接排序&#xff08;通常指的是使用标准的排序算法&#xff08;如快速排序、归并排序、堆排序等&#xff09;对数…...

Kaggle-Plant Seedlings Classification-(多分类+CNN+图形处理)

Plant Seedlings Classification 题意&#xff1a; 就是给出很多图片&#xff0c;预测出图片中的小草是什么类型的。 数据处理&#xff1a; 1.去除图片背景&#xff0c;只保留物体。 2.图片数据加强。 建立模型&#xff1a; 1.CNN的Sequential()&#xff0c;多层卷积块和…...

Android 应用多语言与系统语言偏好设置指南

文章目录 创建语言包以中文包为例 以系统为主导的“应用语言偏好设置”从你的应用调到“应用语言偏好设置” 创建语言包 我们可以使用一个很蹩脚的办法来实现&#xff1a; 以中文包为例 values是默认values-zh-rCN是简体中文values-zh-rTW是繁体&#xff08;台湾省&#xff…...