list的总结
目录
1.什么是list
1.1list 的优势和劣势
优势:
劣势:
2.构造函数
2.1 default (1)
2.2 fill (2)
2.3 range (3)
2.4 copy (4)
3.list iterator的使用
3.1. begin()
3.2. end()
3.3迭代器遍历
4. list容量函数
4.1. empty()
4.2. size()
4.3. max_size()
4.4. front()
4.5. back()
5.list增删查改函数
5.1 push_front
5.2 pop_front
5.3 push_back
5.4 pop_back
5.5 insert
5.6. erase
5.7 swap
5.8 clear
6.list操作函数
6.1. splice
6.2. remove
6.3. unique
6.4. reverse
7.list的迭代器失效
追随光靠近光成为光
1.什么是list
在C++标准库中,list
是一个双向链表容器,用于存储一系列元素。与 vector
和 deque
等容器不同,list
使用链表的数据结构来组织元素,因此在某些操作上具有独特的优势和性能特点。以下是关于 list 的详细介绍
1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高 效。4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率 更好。5. 与其他序列式容器相比,list和forward_list最大的缺陷是不支持任意位置的随机访问,比如:要访问list 的第6个元素,必须从已知的位置(比如头部或者尾部)迭代到该位置,在这段位置上迭代需要线性的时间 开销;list还需要一些额外的空间,以保存每个节点的相关联信息(对于存储类型较小元素的大list来说这 可能是一个重要的因素)
在使用list 时,需要权衡其优势和劣势,根据实际场景来选择合适的容器。当需要频繁插入和删除元素,且不需要随机访问时,list 可能是一个很好的选择。但需要注意的是,由于链表的特性,list 并不适用于需要快速随机访问元素的场景,因为访问某个位置的元素需要遍历链表
1.1list 的优势和劣势
优势:
插入和删除效率高: 由于 std::list 是双向链表,插入和删除操作在常数时间内完成,不需要涉及内存的重新分配和元素的复制。这使得 std::list 在大量插入和删除操作时非常高效。
迭代器的稳定性: std::list 的插入和删除操作不会使迭代器失效,除非删除的正是迭代器所指向的元素。这使得在遍历过程中进行插入和删除操作更加方便和安全。
空间占用相对稳定: std::list 的空间占用相对稳定,插入和删除操作不会影响其他元素的空间占用。
劣势:
不支持随机访问: 由于链表的结构,list 不支持像数组一样的随机访问。访问某个位置的元素需要从链表的开头或结尾开始遍历。
额外的指针开销:list 中的每个元素都需要存储指向前后元素的指针,这使得空间占用相对其他容器更高。
缓存效率低: 由于链表中元素在内存中的存储位置不连续,导致在访问链表元素时,缓存命中率较低,可能影响性能。
迭代器的使用限制:list 的迭代器不支持与普通指针类似的算术操作(如 + 和 -),因此无法像 vector 那样灵活地进行迭代器操作
2.构造函数
2.1 default (1)
这个构造函数用于创建一个空的 std::list
容器。它可以接受一个可选的分配器参数,用于指定内存分配策略。
list<int> v; // 创建一个空的 list 容器
2.2 fill (2)
这个构造函数用于创建一个包含 n 个元素的list
容器,并将这些元素初始化为 val
。你可以通过传递不同的 val
值来创建一个包含相同值的容器。同样,也可以传递一个可选的分配器参数。
list<int> v(10, 20); // 创建一个包含 10个元素,每个元素都是 20 的list 容器
2.3 range (3)
这个构造函数使用迭代器范围 [first, last)
中的元素创建一个list
容器。这使你可以通过一个迭代器范围来初始化容器。同样,它也接受一个可选的分配器参数。
vector<int> v = {1, 2, 3, 4, 5};
list<int> my(v.begin(), v.end()); // 从迭代器范围内的元素创建list 容器
2.4 copy (4)
这个构造函数用于创建一个与已存在的 list
容器 x
相同的副本。它会将 x
中的所有元素拷贝到新的容器中。这是一个拷贝构造函数。
list<int> v = {1, 2, 3, 4, 5};
list<int> my(v); // 创建一个原容器的副本
3.list iterator的使用
3.1. begin()
iterator begin() noexcept;
这个版本的begin()
返回一个迭代器,可以用于修改容器内的元素。noexcept
表示这个函数不会抛出异常。
list<int> m = {1, 2, 3, 4, 5};
list<int>::iterator it = m.begin(); // 获取可修改元素的迭代器
*it = 10; // 修改第一个元素的值为 10
3.2. end()
iterator end() noexcept;
这个版本的end()
返回一个迭代器,可以用于修改容器内的元素。noexcept
表示这个函数不会抛出异常。这个迭代器指向的位置实际上是容器的末尾位置之后一个虚拟的位置,所以它并不指向容器内的任何元素。
list<int> m = {1, 2, 3, 4, 5};
list<int>::iterator it = m.end(); // 获取可修改元素的迭代器
--it; // 将迭代器前移一个位置,指向最后一个元素
*it = 20; // 修改最后一个元素的值为 20
3.3迭代器遍历
(list不支持[ ], 只能用迭代器遍历(范围for也可以底层是迭代器))
#include<iostream>
#include<list>
using namespace std;void mylist()
{list<int> m;m.push_back(1);m.push_back(2);m.push_back(3);//迭代器list<int>::iterator it = m.begin();while (it != m.end()){cout << *it << " ";it++;}cout << endl;//范围forfor (auto e : m){cout << e << " ";}cout << endl;}int main()
{mylist();return 0;
}
4. list容量函数
4.1. empty()
empty() 是 list 容器的一个成员函数,用于判断容器是否为空。它返回一个布尔值,表示容器是否不包含任何元素。函数声明如下:
bool empty() const noexcept;
返回值:如果容器为空,则返回 true,否则返回 false。
例子
#include<iostream>
#include<list>
using namespace std;int main() {list<int> m;if (m.empty()) {cout << "The list is empty." << endl;}else {cout << "The list is not empty." << endl;}m.push_back(10);if (m.empty()) {cout << "The list is empty." << endl;}else {cout << "The list is not empty." << endl;}return 0;
}
4.2. size()
size()
是 list
容器的一个成员函数,用于返回容器中元素的数量。它返回一个无符号整数类型,表示容器中的元素数量。函数声明如下:
size_type size() const noexcept;
返回值:返回容器中元素的数量,即大小。
#include<iostream>
#include<list>
using namespace std;int main() {list<int> m;m.push_back(1);m.push_back(2);m.push_back(3);m.push_back(4);m.push_back(5);cout << "Size of the list: " << m.size() << endl;return 0;
}
4.3. max_size()
max_size() 是 list 容器的一个成员函数,用于返回容器可能容纳的最大元素数量,通常受到系统内存限制的影响。它返回一个无符号整数类型,表示容器的最大大小。函数签名如下:
size_type max_size() const noexcept;
返回值:返回容器可能容纳的最大元素数量。
#include<iostream>
#include<list>
using namespace std;int main() {list<int> m;cout << "Size of the list: " << m.max_size() << endl;return 0;
}
4.4. front()
front()
是 list
容器的成员函数,用于返回容器中第一个元素的引用。这个函数有两个版本,一个用于可修改容器的对象,另一个用于只读(const)容器的对象。函数的签名如下:
reference front();
reference:返回一个对容器中第一个元素的非常引用。
加了const是只读的不能被修改
#include<iostream>
#include<list>
using namespace std;int main()
{list<int> m = {9,2,3,4,5,6};int& firstElement = m.front();cout << "First element: " << m.front() << endl;return 0;
}
4.5. back()
back() 是 list 容器的成员函数,用于返回容器中最后一个元素的引用。这个函数有两个版本,一个用于可修改容器的对象,另一个用于只读(const)容器的对象。函数的签名如下:
reference back();
reference:返回一个对容器中最后一个元素的非常引用。加了const是只读的不能被修改
#include<iostream>
#include<list>
using namespace std;int main()
{list<int> m = {9,2,3,4,5,6};int& firstElement = m.back();cout << "Last element: " << m.back() << endl;return 0;
}
5.list增删查改函数
函数说明 | 接口说明 |
push_front | 在list首元素前插入值为val的元素 |
pop_front | 删除list中第一个元素 |
push_back | 在list尾部插入值为val的元素 |
pop_back | 删除list中最后一个元素 |
insert | 在list position 位置中插入值为val的元素 |
erase | 删除list position位置的元素 |
swap | 交换两个list中的元素 |
clear | 清空list中的有效元素 |
5.1 push_front
push_front 是 list 容器的成员函数,用于在容器的开头插入一个新元素。
这个函数有两个版本:
void push_front (const value_type& val);:接受一个常量引用参数,会创建一个新元素并将参数的值拷贝到新元素中。
void push_front (value_type&& val);:接受一个右值引用参数,用于移动构造一个新元素。这样可以避免额外的拷贝操作,提高了效率。
#include<iostream>
#include<list>
using namespace std;int main()
{list<int> m;int value = 10;m.push_front(value); // Copy insertcout << "List contents:" << endl;for (const auto& num : m) {cout << num << " ";}cout << endl;m.push_front(20); // Move insert,右值引用,更简单高效cout << "List contents after move insert:" << endl;for (const auto& num : m) {cout << num << " ";}cout << endl;return 0;
}
5.2 pop_front
void pop_front();
是用于从 ist 的开头移除一个元素的成员函数。它会删除列表中的第一个元素,并且将列表的大小减小一个单位。
#include<iostream>
#include<list>
using namespace std;int main()
{list<int> m = {10,20,30,40,50};m.pop_front();for (auto e : m){cout << e << " ";}cout << endl;return 0;
}
5.3 push_back
void push_back (const value_type& val);
是 list
容器的成员函数,用于在列表的末尾插入一个新元素。它接受一个常量引用作为参数,将传入的值插入到列表末尾
#include<iostream>
#include<list>
using namespace std;int main()
{list<int> m;m.push_back(2);m.push_back(4);m.push_back(6);m.push_back(8);m.push_back(10);for (auto e : m){cout << e << " ";}cout << endl;return 0;
}
5.4 pop_back
void pop_back();
是 list
容器的成员函数,用于删除列表中的最后一个元素。它会将列表的最后一个元素从容器中移除,同时释放相应的内存资源。
#include<iostream>
#include<list>
using namespace std;int main()
{list<int> m;m.push_back(2);m.push_back(4);m.push_back(6);m.push_back(8);m.push_back(10);m.pop_back();m.pop_back();list<int>::iterator it = m.begin();while (it != m.end()){cout<<*it<<" ";it++;}cout << endl;return 0;
}
5.5 insert
在list position 位置中插入值为val的元素
iterator insert (iterator position, const value_type& val); 是 list 容器的成员函数,用于在指定位置插入一个新元素,新元素的值由 val 参数确定。
参数说明:
position:要插入新元素的位置的迭代器。
val:要插入的元素的值。
该函数返回一个迭代器,指向插入的元素。
#include<iostream>
#include<list>
using namespace std;int main()
{list<int> m = {1,2,3,4,5};auto a = m.begin();a++; //begin的下一个位置,第二个位置m.insert(a,10);list<int>::iterator it = m.begin();while (it != m.end()){cout<<*it<<" ";it++;}cout << endl;return 0;
}
5.6. erase
删除list position位置的元素
iterator erase (iterator position); 和 iterator erase (iterator first, iterator last); 是 std::list 容器的成员函数,用于从列表中删除一个或多个元素。
iterator erase (iterator position); 删除指定位置的元素,并返回指向下一个元素的迭代器。
参数说明:
position
:要删除的元素的位置的迭代器。
返回值:指向被删除元素之后的元素的迭代器。
#include<iostream>
#include<list>
using namespace std;int main()
{list<int> m = {1,2,3,4,5};auto a = m.begin();a++; //begin的下一个位置,第二个位置m.erase(a);
}
5.7 swap
交换两个list中的元素
#include<iostream>
#include<list>
using namespace std;int main()
{list<int> m = {1,2,3,4,5};list<int> n = { 6,7,8,9,0};m.swap(n);list<int>::iterator it = m.begin();cout << "m:";;while (it != m.end()){cout << *it << " ";it++;}cout << endl;list<int>::iterator is = n.begin();cout << "n:";while (is != n.end()){cout << *is << " ";is++;}cout << endl;return 0;
}
5.8 clear
清空list中的有效元素
#include<iostream>
#include<list>
using namespace std;#include <iostream>
#include <list>int main() {list<int> m = { 1, 2, 3, 4, 5 };cout << "m before clear: ";for (int num : m) {cout << num << " ";}cout << endl;m.clear(); // 清空列表cout << "m after clear: ";for (int num : m) {cout << num << " ";}cout << endl;return 0;
}
6.list操作函数
6.1. splice
void splice (iterator position, list& x);
该成员函数用于将另一个列表 x
中的所有元素移动到当前列表中,插入到指定位置 position
前。x
列表在移动后会变为空列表。
#include<iostream>
#include<list>
using namespace std;int main() {list<int> m1 = { 1, 2, 3 };list<int> m2 = { 4, 5, 6 };auto it = m1.begin();advance(it,1); m1.splice(it, m2); // 将 m2 的元素插入到 m1 中cout << "m1 after splice: ";for (int num : m1) {cout << num << " ";}cout << endl;cout << "m2 after splice: ";for (int num : m2) {cout << num << " ";}cout << endl;return 0;
}
6.2. remove
void remove (const value_type& val);
该成员函数用于从列表中移除所有等于给定值 val
的元素。
#include<iostream>
#include<list>
using namespace std;int main() {list<int> m = { 1, 2, 3, 2, 4, 2, 5 };m.remove(2); // 移除列表中所有值为 2 的元素cout << "m after remove: ";for (int num : m) {cout << num << " ";}cout << endl;return 0;
}
6.3. unique
void unique();
这个成员函数用于移除列表中相邻的重复元素。它只保留第一个出现的重复元素,移除后续的重复元素。
#include<iostream>
#include<list>
using namespace std;int main() {list<int> m = { 1, 2, 2, 2, 3, 4,4, 5 };m.unique( ); // 移除列表中所有值为 2 的元素cout << "m after remove: ";for (int num : m) {cout << num << " ";}cout << endl;return 0;
}
6.4. reverse
void reverse();
函数用于将列表中的元素逆序排列。
#include<iostream>
#include<list>
using namespace std;int main() {list<int> m = { 1, 2,3,4, 5 };m.reverse( ); // 移除列表中所有值为 2 的元素cout << "m after remove: ";for (int num : m) {cout << num << " ";}cout << endl;return 0;
}
7.list的迭代器失效
迭代器失效即迭代器所指向的节点的无效,即该节点被删除了。因为list的底层结构为带头结点的双向循环链表,因此在list中进行插入时是不会导致list的迭代器失效的,只有在删除时才会失效,并且失效的只是指向被删除节点的迭代器,其他迭代器不会受到影响。
当使用 std::list
进行删除操作时,可能会导致迭代器失效。下面是一个示例:
#include<iostream>
#include<list>
using namespace std;int main() {list<int> m = { 1, 2, 3, 4, 5 };auto it = m.begin();++it; // Move the iterator to the second elementm.erase(it); // Erase the second elementfor (auto n : m) {cout << n << " ";}return 0;
}
在上面的示例中,当我们在第二个元素位置处使用 erase
函数删除元素后,迭代器 it
就会失效,因为它指向的元素已经被删除。如果我们尝试使用失效的迭代器,可能会导致未定义的行为
要修正这个问题,可以使用 erase
函数的返回值,它会返回一个指向下一个有效元素的迭代器:
#include<iostream>
#include<list>
using namespace std;int main() {list<int> m = { 1, 2, 3, 4, 5 };auto it = m.begin();++it; // Move the iterator to the second elementit=m.erase(it); // Erase the second elementfor (auto n : m) {cout << n << " ";}return 0;
}
本文章借鉴了「爱学习的鱼佬」的原创文章,原文在下面链接
原文链接:https://blog.csdn.net/kingxzq/article/details/132225841
相关文章:

list的总结
目录 1.什么是list 1.1list 的优势和劣势 优势: 劣势: 2.构造函数 2.1 default (1) 2.2 fill (2) 2.3 range (3) 2.4 copy (4) 3.list iterator的使用 3.1. begin() 3.2. end() 3.3迭代器遍历 4. list容量函数 4.1. empty() 4.2. siz…...

c语言数字转圈
数字转圈 题干输入整数 N(1≤N≤9),输出如下 N 阶方阵。 若输入5显示如下方阵: * 1** 2** 3** 4** 5* *16**17**18**19** 6* *15**24**25**20** 7* *14**23**22**21** 8* *13**12**11**10** 9*输入样例3输出样例* 1*…...

Apache Superset数据分析平台如何实现公网实时远程访问数据【内网穿透】
文章目录 前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网穿透,实现公网访问3. 设置固定连接公网地址 前言 Superset是一款由中国知名科技公司开源的“现代化的…...

HarmonyOS应用开发实战—登录页面【ArkTS】
文章目录 本页面实战效果预览图一.HarmonyOS应用开发1.1HarmonyOS 详解1.2 ArkTS详解二.HarmonyOS应用开发实战—登录页面【ArkTS】2.1 ArkTS页面源码2.2 代码解析2.3 心得本页面实战效果预览图 一.HarmonyOS应用开发 1.1HarmonyOS 详解 HarmonyOS(鸿蒙操作系统)是华为公司…...

@RequestMapping
目录 作用: 位置: 属性 1.value 2.method 3.params 4.header 作用: 该注解是一个用来处理请求地址映射的注解。 位置: 可用于映射一个请求或一个方法,可以用在类或方法上。 用于方法上,表示在类的…...

操作系统 应用题 例题+参考答案(考研真题)
1.(考研真题)一个多道批处理系统中仅有P1和P2两个作业,P2比P1晚5ms到达,它们的计算和I/O操作顺序如下。 P1:计算60ms,I/O 80ms,计算20ms。 P2:计算120ms,I/O 40ms&…...

免费获取GPT-4的五种工具
不可否认,由OpenAI带来的GPT-4已是全球最受欢迎的、功能最强大的大语言模型(LLM)之一。大多数人都需要使用ChatGPT Plus的订阅服务去访问GPT-4。为此,他们通常需要每月支付20美元。那么问题来了,如果您不想每月有这笔支…...
XTU OJ 1146 矩阵乘法学习笔记
原题 题目描述 给你两个矩阵A(n*k),B(k*m),请求A*B。 输入 第一行是一个整数K,表示样例的个数。 每个样例包含两个矩阵A和B。 每个矩阵的第一行是两个整数n,m,(1≤n,m≤10)表示矩阵的行和列 以后的n行,每行m个整数,每个整数的绝对值不超过…...

基于官方YOLOv4开发构建目标检测模型超详细实战教程【以自建缺陷检测数据集为例】
本文是关于基于YOLOv4开发构建目标检测模型的超详细实战教程,超详细实战教程相关的博文在前文有相应的系列,感兴趣的话可以自行移步阅读即可:《基于yolov7开发实践实例分割模型超详细教程》 《YOLOv7基于自己的数据集从零构建模型完整训练、…...

1、Docker概述与安装
相关资源网站: ● docker官网:http://www.docker.com ● Docker Hub仓库官网: https://hub.docker.com/ 注意,如果只是想看Docker的安装,可以直接往下拉跳转到Docker架构与安装章节下的Docker具体安装步骤,一步步带你安…...

论文笔记——FasterNet
为了设计快速神经网络,许多工作都集中在减少浮点运算(FLOPs)的数量上。然而,作者观察到FLOPs的这种减少不一定会带来延迟的类似程度的减少。这主要源于每秒低浮点运算(FLOPS)效率低下。 为了实现更快的网络,作者重新回顾了FLOPs的运算符,并证明了如此低的FLOPS主要是由…...

计算机组成原理-固态硬盘SSD
文章目录 总览机械硬盘vs固态硬盘固态硬盘的结构固态硬盘与机械硬盘相比的特点磨损均衡技术例题 总览 机械硬盘vs固态硬盘 固态硬盘采用闪存技术,是电可擦除ROM 下图右边黑色的块块就是一块一块的闪存芯片 固态硬盘的结构 块大小16KB~512KB 页大小512B~4KB 对固…...

Electron+VUE3开发简版的编辑器【文件预览】
简版编辑器的功能主要是: 打开对话框,选择文件后台读取文件文件前端展示文件内容。主要技术栈是VUE3、Electron和Nodejs,VUE3做页面交互,Electron提供一个可执行Nodejs的环境以及支撑整个应用的环境,nodeJS负责读取文件内容。 环境配置、安装依赖这些步骤就不再叙述了。 …...

docker、elasticsearch8、springboot3集成备忘
目录 一、背景 二、安装docker 三、下载安装elasticsearch 四、下载安装elasticsearch-head 五、springboot集成elasticsearch 一、背景 前两年研究了一段时间elasticsearch,当时也是网上找了很多资料,最后解决个各种问题可以在springboot上运行了…...
【Lombok使用详解】
目录 前言:注解速查1.Lombok概念2.安装Lombok3. 使用Lombok3.1 😊Data3.2 GetterSetter3.3 NonNull3.4 Synchronized3.5 ToString:自动生成toString()方法3.6 Cleanup3.7 EqualsAndHashCode 前言:注解速查 NonNull : 用在成员方法…...

Tars框架 Tars-Go 学习
Tars 框架安装 网上安装教程比较多,官方可以参数这个 TARS官方文档 (tarsyun.com) 本文主要介绍部署应用。 安装完成后Tars 界面 增加应用amc 部署申请 amc.GoTestServer.GoTestObj 名称不知道的可以参考自己创建的app config 点击刷新可以看到自己部署的应用 服…...

基于JAVA+SpringBoot+VUE+微信小程序的前后端分离咖啡小程序
✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 随着社会的快速发展和…...

2015年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版
文章目录 2015 级考研管理类联考数学真题一、问题求解(本大题共 15 小题,每小题 3 分,共 45 分)下列每题给出 5 个选项中,只有一个是符合要求的,请在答题卡上将所选择的字母涂黑。真题(2015-01&…...

优秀软件设计特征与原则
1.摘要 一款软件产品好不好用, 除了拥有丰富的功能和人性化的界面设计之外, 还有其深厚的底层基础, 而设计模式和算法是构建这个底层基础的基石。好的设计模式能够让产品开发快速迭代且稳定可靠, 迅速抢占市场先机;而好的算法能够让产品具有核心价值, 例如字节跳动…...

设备管理系统-设备管理软件
一、为什么要使用设备管理系统 1.企业扩张快,设备配置多,管理混乱。 2.设备数量多,存放地点多,查找麻烦。 3.同类设备单独管理, 困难。 4.设备较多时相关信息统计容易出错,错误后修改困难。 二、凡尔码设备管理软件的…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...