STL详解 - list
目录
一、List容器概述
1.1 什么是list?
1.2 核心特点
二、List的定义与初始化
三、List 的基本操作
3.1 插入操作
🌵头插和尾插
🌵指定位置插入
3.2 删除操作
🍋头删和尾删
🍋指定位置删除
四、List 的迭代器使用
4.1 正向迭代器
4.2 反向迭代器
五、List 的元素访问
5.1 获取首尾元素
六、List 的大小控制
6.1 获取和调整大小
七、List 的排序与拼接
7.1 排序操作
7.2 拼接操作
八、List 的删除与去重
8.1 删除操作
8.2 去重操作
九、List 的合并与反转
9.1 合并操作
9.2 反转操作
十、List 的赋值与交换
10.1 赋值操作
10.2 交换操作
一、List容器概述
1.1 什么是list?
list
是C++标准模板库(STL)中的序列式容器,底层采用双向链表实现,支持在任意位置进行O(1)时间复杂度的插入和删除操作。与vector
的连续内存布局不同,list的每个元素存储在一个独立的节点中,节点之间通过指针相互连接。这种结构使得 list
在任意位置插入和删除元素时具有较高的效率,但不支持随机访问。
1.2 核心特点
高效插入和删除:可以在常数时间内完成任意位置的插入和删除操作。
双向迭代:支持正向和反向遍历。
不支持随机访问:无法通过索引直接访问元素。
额外空间开销:每个节点需要存储指向前驱和后继的指针,因此存储空间较大。
二、List的定义与初始化
list
的定义方式非常灵活,以下是几种常见的定义方法:
#include <list>
using namespace std;int main()
{// 方式一:创建空容器list<int> lt1;// 方式二:n个相同元素list<int> lt2(5, 100); // 5个100// 方式三:拷贝构造list<int> lt3(lt2);// 方式四:迭代器范围初始化string str = "hello";list<char> lt4(str.begin(), str.end());// 方式五:数组初始化int arr[] = { 1,3,5,7,9 };list<int> lt5(arr, arr + 5);return 0;
}
三、List 的基本操作
3.1 插入操作
🌵头插和尾插
-
头插:
push_front
将元素插入到容器的头部。 -
尾插:
push_back
将元素插入到容器的尾部。
#include <iostream>
#include <list>
using namespace std;int main()
{list<int> lt;lt.push_front(0);lt.push_front(1);lt.push_front(2);for (auto e : lt){cout << e << " "; // 输出:2 1 0}cout << endl;lt.push_back(3);for (auto e : lt){cout << e << " "; // 输出:2 1 0 3}cout << endl;return 0;
}
🌵指定位置插入
-
单个值:在指定迭代器位置插入一个值。
-
多个值:在指定迭代器位置插入多个相同值。
-
区间:在指定迭代器位置插入一个区间的内容。
#include <iostream>
#include <algorithm>
#include <vector>
#include <list>
using namespace std;int main()
{list<int> lt;lt.push_back(1);lt.push_back(2);lt.push_back(3);auto pos = find(lt.begin(), lt.end(), 2);lt.insert(pos, 9); // 插入单个值for (auto e : lt){cout << e << " "; // 输出:1 9 2 3}cout << endl;pos = find(lt.begin(), lt.end(), 3);lt.insert(pos, 2, 8); // 插入多个值for (auto e : lt){cout << e << " "; // 输出:1 9 2 8 8 3}cout << endl;vector<int> v(2, 7);pos = find(lt.begin(), lt.end(), 1);lt.insert(pos, v.begin(), v.end()); // 插入区间for (auto e : lt){cout << e << " "; // 输出:7 7 1 9 2 8 8 3}cout << endl;return 0;
}
3.2 删除操作
🍋头删和尾删
-
头删:
pop_front
删除容器头部的元素。 -
尾删:
pop_back
删除容器尾部的元素。
lt.pop_front(); // 删除头部元素
for (auto e : lt)
{cout << e << " "; // 输出:7 1 9 2 8 8 3
}
cout << endl;lt.pop_back(); // 删除尾部元素
for (auto e : lt)
{cout << e << " "; // 输出:7 1 9 2 8 8
}
cout << endl;
🍋指定位置删除
-
单个元素:删除指定迭代器位置的元素。
-
区间:删除指定迭代器区间内的所有元素。
pos = find(lt.begin(), lt.end(), 9);
lt.erase(pos); // 删除单个元素
for (auto e : lt)
{cout << e << " "; // 输出:7 1 2 8 8
}
cout << endl;pos = find(lt.begin(), lt.end(), 8);
lt.erase(pos, lt.end()); // 删除区间
for (auto e : lt)
{cout << e << " "; // 输出:7 1 2
}
cout << endl;
四、List 的迭代器使用
4.1 正向迭代器
通过 begin
和 end
获取正向迭代器,用于正向遍历容器。
cout << "Forward iteration: ";
//list<int>::iterator it = lt.begin();
auto it = lt.begin();
while (it != lt.end())
{cout << *it << " ";++it;
}
cout << endl;
4.2 反向迭代器
通过 rbegin
和 rend
获取反向迭代器,用于反向遍历容器。
cout << "Reverse iteration: ";
//list<int>::iterator rit = lt.rbegin();
auto rit = lt.rbegin();
while (rit != lt.rend())
{cout << *rit << " ";++rit;
}
cout << endl;
五、List 的元素访问
5.1 获取首尾元素
-
首元素:
front()
返回第一个元素。 -
尾元素:
back()
返回最后一个元素。
cout << "First element: " << lt.front() << endl; // 输出:7
cout << "Last element: " << lt.back() << endl; // 输出:2
六、List 的大小控制
6.1 获取和调整大小
-
获取大小:
size()
返回容器中元素的数量。 -
调整大小:
resize()
用于调整容器大小。 -
判断是否为空:
empty()
判断容器是否为空。 -
清空容器:
clear()
清空容器。
// 获取大小
cout << "Size: " << lt.size() << endl; // 输出:3// 调整大小
lt.resize(5, 5); // 扩大到 5 个元素,新增元素为 5
for (auto e : lt)
{cout << e << " "; // 输出:7 1 2 5 5
}
cout << endl;// 判断是否为空
cout << "Is empty: " << lt.empty() << endl; // 输出:0// 清空容器
lt.clear();
cout << "Size after clear: " << lt.size() << endl; // 输出:0
七、List 的排序与拼接
7.1 排序操作
sort
函数对容器中的元素进行排序,默认为升序。
lt.push_back(4);
lt.push_back(7);
lt.push_back(3);
lt.sort(); // 排序
for (auto e : lt)
{cout << e << " "; // 输出:3 4 7
}
cout << endl;
7.2 拼接操作
splice
用于将一个 list
的内容拼接到另一个 list
中。
-
拼接整个容器:将整个容器拼接到另一个容器的指定位置。
-
拼接单个元素:将单个元素拼接到另一个容器的指定位置。
-
拼接区间:将指定区间的元素拼接到另一个容器的指定位置。
// 拼接整个容器
list<int> lt1(4, 2);
list<int> lt2(4, 6);
lt1.splice(lt1.begin(), lt2);
for (auto e : lt1)
{cout << e << " "; // 输出:6 6 6 6 2 2 2 2
}
cout << endl;// 拼接单个元素
list<int> lt3(4, 2);
list<int> lt4(4, 6);
lt3.splice(lt3.begin(), lt4, lt4.begin());
for (auto e : lt3)
{cout << e << " "; // 输出:6 2 2 2 2
}
cout << endl;// 拼接区间
list<int> lt5(4, 2);
list<int> lt6(4, 6);
lt5.splice(lt5.begin(), lt6, lt6.begin(), lt6.end());
for (auto e : lt5)
{cout << e << " "; // 输出:6 6 6 6 2 2 2 2
}
cout << endl;
八、List 的删除与去重
8.1 删除操作
-
删除特定值:
remove()
删除容器中所有特定值的元素。 -
删除满足条件的元素:
remove_if()
删除容器中满足条件的元素。
lt.push_back(1);
lt.push_back(3);
lt.push_back(3);
lt.push_back(2);
lt.remove(3); // 删除值为 3 的元素
for (auto e : lt)
{cout << e << " "; // 输出:1 2
}bool is_even(int val)
{return val % 2 == 0;
}
lt.remove_if(is_even); // 删除偶数
for (auto e : lt)
{cout << e << " "; // 输出:1
}
8.2 去重操作
unique
删除容器中连续的重复元素。
lt.push_back(1);
lt.push_back(2);
lt.push_back(2);
lt.push_back(3);
lt.push_back(3);
lt.push_back(3);lt.sort(); // 先排序
lt.unique(); // 删除连续重复元素
for (auto e : lt)
{cout << e << " "; // 输出:1 2 3
}
cout << endl;
九、List 的合并与反转
9.1 合并操作
merge
将一个有序 list
合并到另一个有序 list
中,结果仍保持有序。
list<int> lt1;
lt1.push_back(3);
lt1.push_back(1);
lt1.push_back(4);
lt1.sort(); // 排序 lt1list<int> lt2;
lt2.push_back(6);
lt2.push_back(2);
lt2.push_back(5);
lt2.sort(); // 排序 lt2lt1.merge(lt2); // 合并 lt2 到 lt1
for (auto e : lt1)
{cout << e << " "; // 输出:1 2 3 4 5 6
}
cout << endl;
9.2 反转操作
reverse
将容器中的元素顺序反转。
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
lt.push_back(4);
lt.reverse(); // 反转
for (auto e : lt)
{cout << e << " "; // 输出:4 3 2 1
}
cout << endl;
十、List 的赋值与交换
10.1 赋值操作
assign
用于将新内容分配给容器,替换其当前内容。
-
赋值固定数量的值:
assign(n, val)
。 -
赋值区间内容:
assign(first, last)
。
lt.assign(3, 5); // 赋值 3 个 5
for (auto e : lt)
{cout << e << " "; // 输出:5 5 5
}
cout << endl;string s("hello");
lt.assign(s.begin(), s.end()); // 赋值字符串内容
for (auto e : lt)
{cout << e << " "; // 输出:h e l l o
}
cout << endl;
10.2 交换操作
swap
用于交换两个容器的内容。
list<int> lt1(4, 2);
list<int> lt2(4, 6);lt1.swap(lt2); // 交换内容cout << "lt1: ";
for (auto e : lt1)
{cout << e << " "; // 输出:6 6 6 6
}
cout << endl;cout << "lt2: ";
for (auto e : lt2)
{cout << e << " "; // 输出:2 2 2 2
}
cout << endl;
相关文章:
STL详解 - list
目录 一、List容器概述 1.1 什么是list? 1.2 核心特点 二、List的定义与初始化 三、List 的基本操作 3.1 插入操作 🌵头插和尾插 🌵指定位置插入 3.2 删除操作 🍋头删和尾删 🍋指定位置删除 四、List 的迭代…...
LinkedList<Integer> 常用方法通俗讲解
LinkedList<Integer> linkedList new LinkedList<>(); 创建了一个整数类型的链表。链表就像一列火车,每节车厢(节点)都连接着下一节车厢。下面我用通俗易懂的方式讲解它的主要方法: 1. 添加元素 add(5) - 在链表末尾添加数字5,…...
[250416] GitHub Action 新升级,支持 Windows on Arm
目录 GitHub Actions 更新:Windows arm64 托管运行器现已推出公共预览版 GitHub Actions 更新:Windows arm64 托管运行器现已推出公共预览版 现在,GitHub 为公共代码仓库免费提供了基于 Windows arm64 架构的托管运行器(Hosted R…...
Spring Boot 整合 Redis 实现点赞功能:从基础到实践
在当今互联网应用开发中,点赞功能几乎成为了各类内容平台的标配。它不仅能增加用户与内容之间的互动,还能直观地反映内容的受欢迎程度。本文将详细介绍如何使用 Spring Boot 整合 Redis 来实现一个简单的文章点赞功能,让你轻松掌握这一实用技…...
深入解析布尔注入:原理、实战与防御
目录 一、布尔注入的原理与核心逻辑 二、布尔注入的实战步骤 三、关键函数与绕过技巧 四、实战案例:获取数据库名称 五、防御策略与最佳实践 六、总结 一、布尔注入的原理与核心逻辑 布尔注入(Boolean-Based Blind SQL Injection)是一种…...
1.2 使用RawInputSharp来取得键盘硬件信息以及虚拟码
RawInputSharp 是一个 C# 库,用于处理 Windows 的原始输入(Raw Input) API,它允许开发者直接访问键盘、鼠标等输入设备的底层数据。 本例介绍如何读取键盘的虚拟码以及键盘硬件信息。效果如下图: 示例中:开始是1键的按下与抬起&am…...
C++23 中的可选扩展浮点类型:std::float{16|32|64|128}_t 和 std::bfloat16_t
文章目录 1. 扩展浮点类型概述2. 如何使用这些类型3. 编译器支持4. 特性测试宏5. 类型转换和重载决议6. 标准库支持7. 应用场景8. 总结 C23 引入了可选的扩展浮点类型,包括 std::float16_t、 std::float32_t、 std::float64_t、 std::float128_t 和 std::bfloa…...
JVM 内存调优
内存调优 内存泄漏(Memory Leak)和内存溢出(Memory Overflow)是两种常见的内存管理问题,它们都可能导致程序执行不正常或系统性能下降,但它们的原因和表现有所不同。 内存泄漏 内存泄漏(Memo…...
数据结构(java)栈与队列
栈:(先进后出) 入栈: 1.普通栈一定要放、最小栈放的原则是: *如果最小栈是空的,那么放 *如果最小栈的栈顶元素没有当前的元素小,则放 2.如果要放的的元素小于等于最小栈栈顶元素可以放吗?放 出栈: 需要…...
医疗大模型落地方案:技术选型、部署策略与调优
医疗大模型的落地应用已成为推动医疗行业数字化转型的重要引擎。本文将从技术选型、部署策略和调优方案三大维度,系统性地解析医疗大模型落地的关键要素,为医疗机构提供可操作的落地指南。随着人工智能技术的快速发展,医疗大模型已在影像诊断…...
JVM:类加载子系统
一、类加载子系统概述 类加载子系统由多个类加载器组成,它们负责从文件系统或者网络中读取二进制形式的字节码(.class)文件,并将其加载进 JVM。字节码文件中关于类的定义、类中属性的定义、类中方法的定义以及类中方法的字节码等…...
独家!美团2025校招大数据题库
推荐阅读文章列表 2025最新大数据开发面试笔记V6.0——试读 我的大数据学习之路 面试聊数仓第一季 题库目录 Java 1.写一个多线程代码 2.写一个单例代码 3.LinkedBlockingQueue原理 4.模板设计模式 5.如何设计一个 生产者-消费者队列 6.堆内存和栈内存 7.ThreadLo…...
Angular 框架详解:从入门到进阶
Hi,我是布兰妮甜 !在当今快速发展的 Web 开发领域,Angular 作为 Google 主导的企业级前端框架,以其完整的解决方案、强大的类型系统和丰富的生态系统,成为构建大型复杂应用的首选。不同于其他渐进式框架,An…...
使用Vue 3与.NET 8.0通过SignalR实现实时通信,并结合JWT身份验证
实时通信是一个非常重要的功能。SignalR是一个强大的库,能够帮助我们轻松实现客户端和服务器之间的实时数据传输。本文将结合你的代码示例,向你展示如何使用Vue 3作为前端框架,ASP.NET Core作为后端框架,通过SignalR实现实时消息通…...
Harmonyos-Navigation路由跳转
Harmonyos-Navigation路由跳转 概述Navigation路由跳转模块内页面路由系统路由表测试页代码创建并配置路由表文件配置创建好的路由表文件跳转页面 自定义路由表 跨模块路由封装库模块路由跳转工具类 概述 Navigation是路由容器组件,一般作为首页的根容器࿰…...
《人工智能应用创新》5天出审稿意见!
期刊简介 《人工智能应用创新(Innovative Applications of AI)》 (ISSN:3078-2147)是由香港修墨信息工程研究院举办,经国际同行评审后收录的学术期刊。本刊共分三个栏目:综述分析、应用示范、前…...
Excel数据自动填充到Word自定义表格
上一份工作在一家国企做软件测试,需求变来变去(3天一小改,5天换版面),xmind要先整理一遍测试用例(版本迭代,该废的废,该加的加),完了细节在禅道里补充&#x…...
Spring Boot一次接口请求涉及的完整执行链路
Spring Boot一次接口请求涉及的完整执行链路 🔁 Spring 项目请求执行链路(简化视图) 客户端请求(浏览器、Postman)↓ Tomcat(Servlet 容器)↓ 【Listener 监听器】↓ 【Filter 过滤器】&#x…...
mapbox基础,加载视频到地图
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️raster 栅格图层 api二、🍀加载视频到…...
Android动态化技术优化
Android动态化技术优化 一、WebView优化基础 1.1 WebView性能瓶颈 初始化耗时内存占用高页面加载慢白屏问题 1.2 WebView基本配置 class OptimizedWebView : WebView {init {// 开启硬件加速setLayerType(LAYER_TYPE_HARDWARE, null)// 配置WebSettingssettings.apply {//…...
Spring Boot 自定义定时任务组件深度解析:Quartz 集成与设计模式实战
一、组件设计目标 解决痛点: 简化 Quartz 原生 API 的复杂性统一任务调度管理(增删改查、日志、重试)与 Spring Boot 生态无缝整合 二、实现步骤详解 1. 组件初始化配置 1.1 初始化 Quartz 表结构 下载 SQL 脚本 🔗 官方表…...
Java Bean演进历程:从POJO到Spring Boot配置绑定
一、早期阶段:手动编写Java Bean 基本结构 私有属性:所有字段均为private,保证封装性。 公共构造方法:提供无参构造(JavaBean规范)或有参构造(POJO常见)。 Setter/Getter方法&…...
信息科技伦理与道德0:课程安排
1 课程安排 分组讨论的议题如下: 1.1 生成对抗网络(GAN) (1)GAN生成伪造人脸与身份冒用风险 算法原理: GAN通过生成器(Generator)和判别器(Discriminator)…...
STM32F103C8T6-基于FreeRTOS系统实现步进电机控制
引言 上一篇文章讲述了如何使用蓝牙连接stm32进行数据收发控制步进电机,这篇在之前的基础上通过移植操作系统(FreeRTOS或者其他的也可以,原理操作都类似)实现步进电机控制。 上篇博客指路:STM32蓝牙连接Android实现云…...
数字资产和交易解决方案
数字资产和交易解决方案 一、背景 (一)数字经济的蓬勃发展 随着信息技术的飞速发展,数字经济已成为全球经济增长的新引擎。数字资产作为数字经济的重要组成部分,其价值逐渐被人们所认识和重视。数字资产包括但不限于数字货币、…...
计算机网络 实验四 静态路由的配置与应用
一、实验目的 熟悉路由器的工作原理;熟悉静态路由的原理;熟悉华为网络模拟器的使用方法;掌握网络拓扑图的绘制;掌握路由器的配置。 二、实验设备 PC、华为模拟器ENSP。 三、实验步骤 知识准备:路由器和静态路由的…...
二进制求和 - 简单
************* C topic: 67. 二进制求和 - 力扣(LeetCode) ************* Give the topic an inspection. Too many works these days. And no spare time for code learning. However here I am gagin. This topic is an easy one and I want to pra…...
【C++】 —— 笔试刷题day_18
一、压缩字符串(一) 题目解析 题目给定一个字符str,让我们将这个字符串进行压缩; **压缩规则:**出现多次的字符压缩成字符数字;例如aaa压缩成a3。如果字符值出现一次,1不用写。 算法思路 这道题总的来说就非常简单了…...
LeetCode 热题 100_最长递增子序列(87_300_中等_C++)(动态规划)
LeetCode 热题 100_最长递增子序列(87_300) 题目描述:输入输出样例:题解:解题思路:思路一(动态规划): 代码实现代码实现(思路一(动态规划…...
asp-for等常用的HTML辅助标记?
在ASP.NET Core Razor Pages 和 MVC 中,除了asp-for之外,还有许多常用的 HTML 辅助标记,下面为你详细介绍: 表单与路由相关 asp-action 和 asp-controller 用途:这两个标记用于生成表单或链接的 URL,指定…...
map用法介绍
在 C 里,map是标准库提供的一种关联容器,它以键 - 值对的形式存储元素,并且按键的升序排列。下面为你展示如何在 C 用map。 如果没有用万能头的时候,需要加入#include 用法介绍: 映射[需要注意map的映射是1对1的不能出…...
AIGC-十款知识付费类智能体完整指令直接用(DeepSeek,豆包,千问,Kimi,GPT)
Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列AIGC(GPT、DeepSeek、豆包、千问、Kimi)👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资…...
一页概览:桌面虚拟化方案
2010年左右手绘的,用的是公司的信纸,马克笔。当时在买VMware和Citrix的桌面虚拟化方案,以及Wyse的瘦客户端。...
通过导入 Excel 的方式复制文件或文件夹
在进行文件或文件夹的批量整理时,许多人都会遇到需要将大量文件或文件夹复制到另一个文件夹中的问题。传统的手动复制粘贴方法不仅繁琐,而且效率低下。今天给大家介绍一种方法,可以实现将多个不同文件夹中的文件复制到一个或者多个文件夹&…...
Python单例设计模式深度解析
目录 一、什么是单例设计模式 核心特点 二、为什么需要单例模式 典型应用场景 优势对比 三、Python实现单例的三种方式 1. 使用__new__方法(经典实现) 2. 使用装饰器实现 3. 使用模块实现(Python特有) 四、深入理解__new…...
WPF 图标原地旋转
如何使元素原地旋转 - WPF .NET Framework | Microsoft Learn <ButtonRenderTransformOrigin"0.5,0.5"HorizontalAlignment"Left">Hello,World<Button.RenderTransform><RotateTransform x:Name"MyAnimatedTransform" Angle"…...
深入解析Java日志框架Logback:从原理到最佳实践
Logback作为Java领域最主流的日志框架之一,由Log4j创始人Ceki Glc设计开发,凭借其卓越的性能、灵活的配置以及与SLF4J的无缝集成,成为企业级应用开发的首选日志组件。本文将从架构设计、核心机制、配置优化等维度全面剖析Logback的技术细节。…...
【设计模式——装饰器模式】
在 Unity 游戏开发中,装饰模式是一种非常灵活的设计模式,用于在运行时动态地为对象添加功能。以下是装饰模式的设计思路和实现步骤,以角色的装备系统为例进行说明。 设计思路 装饰模式的核心思想是通过创建一个装饰器类来包装原有的对象&am…...
在 macOS 上切换默认 Java 版本
下载javasdk 打开android studio -> setting -> build.execution,dep -> build tools -> gradle -> Gradle JDK -> download JDK… 点击下载,就下载到了 ~/Library/Java/JavaVirtualMachines/ 安装 jenv brew install jenv将 jenv 集成到 Shell …...
【Linux网络与网络编程】11.数据链路层mac帧协议ARP协议
前面在介绍网络层时我们提出来过一个问题:主机是怎么把数据交给路由器的?那里我们说这是由数据链路层来做的。 网络上的报文在物理结构上是以mac帧的形式流动的,但在逻辑上是以IP流动的,IP的流动是需要mac帧支持的。 数据链路层解…...
158页PPT | 某大型研发制造集团信息化IT规划整体方案
该文档是某大型研发制造集团信息化IT规划整体方案,涵盖项目过程回顾、信息平台分析、现状评估、规划及治理建议和下阶段工作计划。项目旨在理解集团战略目标,评估信息化应用现状,制定可扩展的蓝图,明确未来3年管理与IT建设子项目&…...
ON DUPLICATE KEY UPDATE 更底层解释它的优势
从更底层来看,ON DUPLICATE KEY UPDATE 的优势主要源于以下几个方面: 1. 减少网络往返次数 先查询再更新:这种方式需要客户端和数据库服务器之间进行多次网络通信。首先,客户端发送一个 SELECT 查询请求,然后等待服务…...
Python 赋能区块链金融——从零构建智能交易系统
Python 赋能区块链金融——从零构建智能交易系统 引言:区块链金融系统的崛起 区块链技术正在颠覆传统金融体系,带来去中心化、透明化和高效的交易模式。从 DeFi(去中心化金融)到 NFT 市场,区块链金融系统已成为 Web 3.0 生态的重要支柱。如何用 Python 构建一个区块链金…...
基础(测试用例设计方法:流程图法,等价类划分法,边界值分析法,判定表法,正交分析法,错误推测法,其他方法,案例)
目录 流程图法(场景法) 业务流程 流程图 流程图法设计测试用例 案例-退款泳道图 案例-刷视频流程 等价类划分法 等价类 等价类设计测试用例 案例1-验证电话号码 案例2-验证邮箱格式 边界值分析法 测试数据的选取 边界值法设计测试用例 案例…...
QT —— 信号和槽(槽函数)
QT —— 信号和槽 信号和槽信号(Signal)槽(Slot)声明方式工作原理连接方式1. 传统连接方式(Qt4风格)2. 新式连接方式(Qt5风格) 区分槽函数和信号通过QtCreator生成信号槽代码自动生成槽函数显式连接的优势命名约定自动连接的局限性最佳实践建议结论 我们之前对QT,有…...
ROS2模块库概览
一、核心通信与基础库(最常用) 客户端库 rclcpp (ROS Client Library for C) 核心API:create_node(), create_publisher(), create_subscription()高级特性: 生命周期节点:通过rclcpp_lifecycle实现configure/activate…...
HADOOP——序列化
1.创建一个data目录在主目录下,并且在data目录下新建log.txt文件 2.新建flow软件包,在example软件包下 FlowBean package com.example.flow;import org.apache.hadoop.io.Writable;import java.io.DataInput; import java.io.DataOutput; import java.i…...
第五章 5.2ESP32物联网应用:HTTP与Web服务器详细教学
本文将详细讲解如何在ESP32上搭建Web服务器,通过HTTP协议实现远程控制LED灯。每行代码均有详细注释,适合零基础学习。 一、HTTP协议基础 HTTP是客户端(浏览器)和服务器之间的通信协议,常用请求方法: GET&a…...
c++11 绑定器bind
文章目录 std::bind 使用总结(C11)1. 绑定普通函数2. 使用占位符 _1, _2,调用时传参数3. 绑定类的成员函数(类外)4. 绑定类的成员函数(类内)5. 占位符结合成员函数小结 std::bind 使用总结&…...
实现时间最优轨迹生成/轨迹规划方法(TOTG),不使用moveit,可用于ROS驱动机械臂FollowJointTrajectoryGoal()
前言 在我的这篇文章:https://blog.csdn.net/weixin_45702459/article/details/139293391?spm1011.2415.3001.5331中,写了不使用moveit来ros驱动机械臂的方法,也就是用FollowJointTrajectoryGoal()来进行一系列点的关节运动,其实…...