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

顺序容器 -forward list单链表

forward list单链表是C++11加入到STL的。

使用forward list,必须包含头文件<forward_list>

#include <forward_list>

这个头文件被定义在命名空间std内。

namespace std {template <typename T,typename Allocator = allocator<T> >class forward_list;
}

它的第一个参数T是任意类型,第二个参数默认不写。

forward list和数据结构中的单链表类似是一个行为受限的list(双向链表),只能"往前走不能回头",凡是list不提供的功能它都不提供。它的优点是内存用量较少(不需要保存回头的指针),行动也略快。

相比较list,forward list有以下约束:

  • forward list只提供向前迭代器,而不是双向迭代器,因此它不支持反向迭代器。
  • forward list没有指向尾元素的指针,所以forward list不提供处理"尾元素"的函数,如back,push_back和pop_back(太慢了)。
  • forward list不提供size函数。可以自己实现。
  • forward list是单链表,而插入和删除操作都需要依赖前一个节点。所以它的插入和删除类的函数都带一个后缀_after。例如insert_after替代insert。
  • forward list插入和删除操作需要依赖前一个节点,所以它提供before_begin函数,返回第一个元素前面的位置。

除了上面这些差异,forward list的行为就像list。

  • forward list不提供随机访问。若要访问第5个元素,必须从头到尾依次遍历过去。
  • 插入和删除元素,速度都很快(前提是你已经指定了位置)。
  • 插入和删除元素,不会造成"指向其它元素"的指针,引用和迭代器失效。

定义及初始化

下表列出定义forward list对象的常用初始化方法.

#include <iostream>
#include <forward_list>
using namespace std;//输出l1的所有数据
void Show(const forward_list<int>& l1)
{for (auto& x : l1)cout << x << " ";cout << endl;
}int main()
{forward_list<int> l1; //创建一个空的单链表forward_list<int> l2(2);//创建一个包含2个默认值的单链表forward_list<int> l3(3, 5);//创建一个包含3个5的单链表forward_list<int> l4{ 1,2,3,4 };//创建一个包含1,2,3,4的单链表forward_list<int> l5(l4);//创建一个和l4元素相同的单链表forward_list<int> l6 = l4;//同l5,创建一个和l4元素相同的单链表forward_list<int> l7(++l4.begin(), l4.end());//创建一个不包含l4第一个元素的单链表cout << "l1:"; Show(l1);cout << "l2:"; Show(l2);cout << "l3:"; Show(l3);cout << "l4:"; Show(l4);cout << "l5:"; Show(l5);cout << "l6:"; Show(l6);cout << "l7:"; Show(l7);return 0;
}

forward list常用迭代器

forward list只支持向前迭代器(forward iterator),不支持逆序迭代器和随机迭代器。所以STL中需要随机迭代器的算法不能用于forward list,例如sort。不过forward list自带sort算法。

forward list常用的迭代器如下:

注意before_begin()和cbefore_begin()并不代表forward list的一个合法位置,解引用这些位置会导致未定义的行为。也就是说,before_begin()不能用于STL的任何算法。

例如,利用迭代器访问forward list对象。

#include <iostream>
#include <forward_list>
#include <iterator>
using namespace std;//利用distance函数求出单链表的长度size
template<typename T>
int forward_list_size(const forward_list<T>& l)
{return distance(l.begin(), l.end());//注意distance的时间复杂度为O(n)//distance 需要引入 <iterator> 文件
}int main()
{forward_list<int> l1{ 1,2,3,4,5 };//利用迭代器输出l1的所有数据cout << "l1:";for (forward_list<int>::const_iterator it = l1.cbegin(); it != l1.cend(); ++it)cout << *it << " ";cout << endl;cout << "l1的长度:" << forward_list_size(l1) << endl;l1.insert_after(l1.before_begin(), 100);//在l1的最前面插入100//l1.push_front(100);//等同上面//利用迭代器修改链表的值for (auto it = l1.begin(); it != l1.end(); ++it) //把每个元素的值*2*it *= 2;//利用迭代器输出l1的所有数据cout << "l1:";for (auto it = l1.cbegin(); it != l1.cend(); ++it)cout << *it << " ";cout << endl;cout << "l1的长度:" << forward_list_size(l1);return 0;
}

说明: distance返回两个迭代器直接的距离。

difference_type distance(InputIterator _First, InputIterator _Last);
//返回第一个迭代器到第二个迭代器的距离,如果是随机迭代器时间为常数O(1),否则时间为线性O(n)。

forward list常用运算符

forward list类既支持常用的=,==,!=,< , >等运算符,也可以通过调用其成员函数来执行相应的操作。下面列举了其常用的操作。

#include <iostream>
#include <forward_list>
#include <iterator>
using namespace std;//输出l1的所有数据
void Show(const forward_list<int>& l1)
{for (auto& x : l1)cout << x << " ";cout << endl;
}int main()
{forward_list<int> l1{ 1, 2, 3, 4, 5 };//创建包含1,2,3,4,5的单链表forward_list<int>l2;//创建空单链表l2 = l1;//把l1的所有元素赋值给l2cout << "l1:"; Show(l1);//输出l1所有元素值cout << "l2:"; Show(l2);//输出l2所有元素值if (l1 == l2)cout << "l1 == l2" << endl;l1.front() = 100;//把l1的第一元素改为100,等同下一行的代码//int& x = l1.front(); x = 100;//把l1的第一元素改为100cout << "l1:"; Show(l1);//输出l1所有元素值cout << "l2:"; Show(l2);//输出l1所有元素值if (l1 != l2)cout << "l1 != l2" << endl;if (l1 > l2)cout << "l1 > l2" << endl;elsecout << "l1 <= l2" << endl;return 0;
}

forward list常用成员函数

下面列举forward list对象常用的成员函数。

注意:forward list不提供size函数,不提供尾部操作函数。

forward list特有成员函数

下面列举forward list特有的函数(相比vector)

merge特有成员函数

把两个单链表的元素进行合并。注意合并的前提是原来两个链表必须按照合并的方法有序。默认升序合并。

#include <iostream>
#include <forward_list>
#include <iterator>
using namespace std;//输出l1的所有数据
void Show(const forward_list<int>& l1)
{for (auto& x : l1)cout << x << " ";cout << endl;
}int main()
{forward_list<int>l1{ 2,4,6,8 }; //创建l1forward_list<int>l2{ 1,2,3,5,7,9 };//创建l2cout << "l1:"; Show(l1);//输出l1cout << "l2:"; Show(l2);//输出l2l1.merge(l2);//把l2合并到l1中cout << "把l2合并到l1中后" << endl;cout << "l1:"; Show(l1);//输出l1cout << "l2:"; Show(l2);//输出l2return 0;
}

合并的前提是原有的两个链表是"有序的"(按照排序的规则),如果不符合前提条件结果是未定义的。

emove特有成员函数 

void remove( const Type& _Val);//_Val需要删除的值

删除所有和_Val相同的值。

#include <iostream>
#include <forward_list>
#include <iterator>
using namespace std;//输出l1的所有数据
void Show(const forward_list<char>& l1)
{for (auto& x : l1)cout << x << " ";cout << endl;
}int main()
{//创建包含字符的单链表forward_list<char> l1{ 'a','b','c','a','b','c','d','a','b','c','d','e' };cout << "l1:"; Show(l1);l1.remove('a');//删除'a'cout << "l1删除a后" << endl;cout << "l1:"; Show(l1);return 0;
}

splice_after特有成员函数

链表连结,把一个链表的元素连结到另一个链表中。 请注意,1.插入点在第一个参数(迭代器)的后面;2.被插入的数据如果是迭代器也是从它后面的一个数据开始。

#include <iostream>
#include <forward_list>
#include <iterator>
using namespace std;//输出l1的所有数据
void Show(const forward_list<int>& l1)
{for (auto& x : l1)cout << x << " ";cout << endl;
}int main()
{forward_list<int> l1{ 10, 11 };forward_list<int> l2{ 20, 21, 22 };forward_list<int> l3{ 30, 31 };forward_list<int> l4{ 40, 41, 42, 43 };forward_list<int>::iterator first_iter;forward_list<int>::iterator last_iter;cout << "初始值:" << endl;cout << "l1:";    Show(l1);cout << "l2:";    Show(l2);cout << "l3:";    Show(l3);cout << "l4:";    Show(l4);//连结整个链表l2.splice_after(l2.before_begin(), l1);//在l2的前面连结l1cout << "把l1连结到l2的最前面后:" << endl;cout << "l1 = ";    Show(l1);cout << "l2 = ";    Show(l2);//连结一个元素l2.splice_after(l2.begin(), l3, l3.begin());cout << "把l3的第二个元素连结到l2的第一个值后:" << endl;cout << "l3:";    Show(l3);cout << "l2:";    Show(l2);//连结一个区间first_iter = l4.begin();last_iter = l4.end();++first_iter; //第二个,从第三个开始连结过去l2.splice_after(l2.before_begin(), l4, first_iter, last_iter);cout << "把l4的区间数据连结到l2的最前面后:" << endl;cout << "l4 = ";    Show(l4);cout << "l2 = ";    Show(l2);return 0;
}

相关文章:

顺序容器 -forward list单链表

forward list单链表是C11加入到STL的。 使用forward list&#xff0c;必须包含头文件<forward_list> #include <forward_list> 这个头文件被定义在命名空间std内。 namespace std {template <typename T,typename Allocator allocator<T> >class …...

C++:算术运算符

程序员Amin &#x1f648;作者简介&#xff1a;练习时长两年半&#xff0c;全栈up主 &#x1f649;个人主页&#xff1a;程序员Amin &#x1f64a; P   S : 点赞是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全…...

缺页异常导致的iowait打印出相关文件的绝对路径

一、背景 在之前的博客 增加等IO状态的唤醒堆栈打印及缺页异常导致iowait分析-CSDN博客 里&#xff0c;我们进一步优化了D状态和等IO状态的事件的堆栈打印&#xff0c;补充了唤醒堆栈打印&#xff0c;也分析了一种比较典型的缺页异常filemap_fault导致的iowait的情况。 在这篇…...

【Centos】centos7内核升级-亲测有效

相关资源 通过网盘分享的文件&#xff1a;脚本升级 链接: https://pan.baidu.com/s/1yrCnflT-xWhAPVQRx8_YUg?pwd52xy 提取码: 52xy –来自百度网盘超级会员v5的分享 使用教程 将脚本文件上传到服务器的一个目录 执行更新命令 yum install -y linux-firmware执行脚本即可 …...

多模态模型:专栏概要与内容目录

文章目录 多模态模型&#x1f4da; 核心内容模块Stable Diffusion基础教程Stable Diffusion原理深度解析部署与环境配置其他多模态模型实践 多模态模型 &#x1f525; 专栏简介 | 解锁AI绘画与多模态模型的技术奥秘 探索多模态AI技术&#xff0c;掌握Stable Diffusion等流行框…...

1. 购物车

1. 购物车 咱们购物车基于 V2 装饰器进行开发&#xff0c;底气来源于 自定义组件混用场景指导 1.1. 素材整合 observedv2和Trace 数据模型和页面 // 其他略 // 购物车 export interface CartGoods {count: number;id: string;name: string;picture: string;price: number;…...

frp 让服务器远程调用本地的服务(比如你的java 8080项目)

1、服务器上安装frp 2、本地安装frp 服务器上 frps.toml 配置信息&#xff1a; bindPort 30000auth.token "密码" # 客户端连接密码vhostHTTPPort 8082 本地 frpc.toml serverAddr "服务器ip" serverPort 30000 auth.token "服务器上设置的…...

《AI大模型应知应会100篇》第56篇:LangChain快速入门与应用示例

第56篇&#xff1a;LangChain快速入门与应用示例 前言 最近最火的肯定非Manus和OpenManus莫属&#xff0c;因为与传统AI工具仅提供信息不同&#xff0c;Manus能完成端到端的任务闭环。例如用户发送“筛选本月抖音爆款视频”&#xff0c;它会自动完成&#xff1a; 爬取平台数据…...

大模型——如何在本地部署微软的OmniParser V2

微软的 OmniParser V2 是一款尖端的人工智能屏幕解析器,可通过分析屏幕截图从图形用户界面中提取结构化数据,使人工智能代理能够与屏幕元素进行无缝交互。该工具是构建自主图形用户界面代理的完美选择,它改变了自动化和工作流程优化的游戏规则。在本指南中,我们将介绍如何在…...

Oracle触发器使用(一):DML触发器

Oracle触发器使用(一):DML触发器 DML触发器条件谓词触发器INSTEAD OF DML触发器复合DML触发器Oracle数据库中的触发器(Trigger)本质上也是PL/SQL代码,触发器可以被Enable或者Disable,但是不能像存储过程那样被直接调用执行。 触发器不能独立存在,而是定义在表、视图、…...

智慧园区大屏如何实现全局监测:监测意义、内容、方式

智慧园区的价值不容小觑呀&#xff0c;可以说园区的大部分数据都在这个大屏上&#xff0c;监测数据越多&#xff0c;那么大屏的价值就越大。很多小伙伴拿到需求后感觉无从下手&#xff0c;本文在这里智慧园区大屏可以监测哪些内容、监测的意义、监测的方式等&#xff0c;欢迎点…...

LeetCode 解题思路 31(Hot 100)

解题思路&#xff1a; 递归参数&#xff1a; 字符串 s、结果集 result、当前路径 path、回文子串数组 dp、开始位置 start。递归过程&#xff1a; 当当前路径 path 的长度等于 s.length() 时&#xff0c;说明已经分割完成&#xff0c;加入结果集。若当前起止位置满足回文条件…...

fastAPI详细介绍以及使用方法

FastAPI是一个现代的Python web框架&#xff0c;它提供快速构建API的能力。它具有高性能、易用性和文档自动生成的特点&#xff0c;使得开发者能够快速开发高效的API服务。 以下是一些FastAPI的主要特点和优势&#xff1a; 快速&#xff1a;FastAPI基于Python 3.6的异步框架St…...

数字人训练数据修正和查看 不需要GPU也能运行的DH_live-加载自己训练-

自己训练模pth报错 le "D:\ai\dh_live\app.py", line 42, in demo_mini interface_mini(asset_path, wav_path, output_video_name) File "D:\ai\dh_live\demo_mini.py", line 21, in interface_mini renderModel_mini.loadModel("checkpoi…...

WGAN-GP 原理及实现(pytorch版)

WGAN-GP 原理及实现 一、WGAN-GP 原理1.1 WGAN-GP 核心原理1.2 WGAN-GP 实现步骤1.3 总结二、WGAN-GP 实现2.1 导包2.2 数据加载和处理2.3 构建生成器2.4 构建判别器2.5 训练和保存模型2.6 图片转GIF一、WGAN-GP 原理 Wasserstein GAN with Gradient Penalty (WGAN-GP) 是对原…...

chromium魔改——navigator.webdriver 检测

chromium源码官网 https://source.chromium.org/chromium/chromium/src 说下修改的chromium源码思路&#xff1a; 首先在修改源码过检测之前&#xff0c;我们要知道它是怎么检测的&#xff0c;找到他通过哪个JS的API来做的检测&#xff0c;只有知道了如何检测&#xff0c;我们…...

Sentinel[超详细讲解]-7 -之 -熔断降级[异常比例阈值]

&#x1f4d6; 主要讲解熔断降级之 --- 异常比例阈值 &#x1f680; 1️⃣ 背景 Sentinel 以流量作为切入点&#xff0c;提供了很多的丰富的功能&#xff0c;例如&#x1f917;&#xff1a; 流量控制&#xff0c;熔断降级等&#xff0c;它能够有效的适用各个复杂的业务场景&am…...

程序化广告行业(56/89):S2S对接与第三方广告监测全解析

程序化广告行业&#xff08;56/89&#xff09;&#xff1a;S2S对接与第三方广告监测全解析 大家好&#xff01;在前面的博客中&#xff0c;我们一起深入学习了程序化广告的人群标签、用户标签生成、Look Alike原理&#xff0c;以及DMP与DSP对接和数据统计原理等内容。今天&…...

C++进阶知识复习 31~38

目的 写这一系列文章的目的主要是为了秋招时候应对计算机基础问题能够流畅的回答出来 &#xff08;如果不整理下 磕磕绊绊的回答会被认为是不熟悉&#xff09; 本文章题目的主要来源来自于 面试鸭 部分面试鸭上没有而牛客网上有的博主会进行查缺补漏 题目编号按照面试鸭官网…...

Spring Boot 整合mybatis

2025/4/3 向全栈工程师迈进&#xff01;&#xff01;&#xff01; 配置文件在实际开发中如何使用呢&#xff0c;接下去将通过Spring Boot整合mybatis来看配置文件如何在实际开发中被使用。 一、引入mybatis起步依赖 在pom.xml中引入mybatis的起步依赖&#xff0c;如下。 在这…...

新能源汽车测试中的信号调理模块:从原理到实战应用

摘要 信号调理模块&#xff08;Signal Conditioning Module, SCM&#xff09;是新能源汽车&#xff08;NEV&#xff09;测试系统中的关键环节&#xff0c;直接影响数据采集的精度与可靠性。本文面向HIL测试工程师、电机测试工程师及整车动力经济性测试工程师&#xff0c;系统性…...

一篇关于Netty相关的梳理总结

一篇关于Netty的梳理总结 一、Netty1.1 什么是netty&#xff1f;为什么要用netty1.2 Netty是什么&#xff1f; 二、Netty关于网络基础2.1 线程池2.2 线程池线程的生命周期和状态2.3 为什么要使用线程池2.4 简述线程池原理&#xff0c;FixedThreadPool用的阻塞队列是什么2.5 并发…...

纺织车间数字化转型:降本增效新路径

在纺织行业竞争日益激烈的当下&#xff0c;如何提升生产效率、降低成本成为企业关注的焦点。某纺织车间通过创新引入明达技术MBox20网关并部署IOT 平台&#xff0c;成功接入千台设备&#xff0c;实现了生产模式的重大变革。​ 以往&#xff0c;纺织车间生产犹如黑箱&#xff0c…...

递归典例---汉诺塔

https://ybt.ssoier.cn/problem_show.php?pid1205 #include<bits/stdc.h> #define endl \n #define pii pair<int,int>using namespace std; using ll long long;void move(int n,char a,char b,char c) // n 个盘子&#xff0c;通过 b&#xff0c;从 a 移动到 …...

Unity2D:从零开始制作一款跑酷游戏!

目录 成品展示 美术资源 制作步骤 场景预布设&#xff1a; 实现人物基础功能&#xff1a; 移动背景——横向卷轴&#xff1a; 生成障碍物&#xff1a; 生成敌人与攻击逻辑&#xff1a; UI制作与重新开始&#xff1a; 导出游戏&#xff1a; 小结 大家小时候都玩过《…...

维拉工时自定义字段:赋能项目数据的深度洞察 | 上新预告

原文链接&#xff1a;维拉工时自定义字段&#xff1a;赋能项目数据的深度洞察 | 上新预告 在项目管理实践中&#xff0c;每个企业都有独特的数据统计与分析需求。为了帮助用户实现个性化数据建模&#xff0c;从而更精准地衡量项目进度和预算投入&#xff0c;维拉工时全新升级的…...

C++ | 文件读写(ofstream/ifstream/fstream)

一、C文件操作核心类 C标准库通过<fstream>提供了强大的文件操作支持&#xff0c;主要包含三个关键类&#xff1a; 类名描述典型用途ofstream输出文件流&#xff08;Output File Stream&#xff09;文件写入操作ifstream输入文件流&#xff08;Input File Stream&#…...

flux文生图部署笔记

目录 依赖库: 文生图推理代码cpu: cuda版推理: 依赖库: tensorrt安装: pip install nvidia-pyindex # 添加NVIDIA仓库索引 pip install tensorrt 文生图推理代码cpu: import torch from diffusers import FluxPipelinemodel_id = "black-forest-labs/FLUX.1-s…...

二语习得理论(Second Language Acquisition, SLA)如何学习英语

二语习得理论&#xff08;Second Language Acquisition, SLA&#xff09;是研究学习者如何在成人或青少年阶段学习第二语言&#xff08;L2&#xff09;的理论框架。该理论主要关注语言习得过程中的认知、社会和文化因素&#xff0c;解释了学习者如何从初学者逐渐变得流利并能够…...

策略模式实际用处,改吧改吧直接用,两种方式

controller RestController RequestMapping("admin/test") RequiredArgsConstructor(onConstructor __(Autowired)) public class TestController {Autowiredprivate VideoFactory VideoFactory;GetMapping("getList")public R getList(){// 第一种方式T…...

计算机网络-TCP的流量控制

内容来源&#xff1a;小林coding 本文是对小林coding的TPC流量控制的精简总结 什么是流量控制 发送方不能无脑的发数据给接收方&#xff0c;要考虑接收方处理能力 如果一直无脑的发数据给对方&#xff0c;但对方处理不过来&#xff0c;那么就会导致触发重发机制 从而导致网…...

搬砖--贪心+排序的背包

a在上面b在下面->a.v-M-b.m>b.v-M-a.m->剩余率大 所以我先遍历a&#xff0c;让a在上面 这就是要考虑贪心排序的01背包 因为它有放的限制条件 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typedef pair<ll,int>…...

git克隆数据失败

场景&#xff1a;当新到一家公司&#xff0c;然后接手了上一个同时的电脑&#xff0c;使用git克隆代码一直提示无法访问&#xff0c;如图 原因&#xff1a;即使配置的新的用户信息。但是window记录了上一个同事的登录信息&#xff0c;上一个同事已经被剔除权限&#xff0c;再拉…...

Dart 语法

1. 级联操作符 … var paint Paint()..color Colors.black..strokeCap StrokeCap.round..strokeWidth 5.0;2. firstWhereOrNull 3. 隐藏或导入部分组件 // Import only foo. import package:lib1/lib1.dart show foo;// Import all names EXCEPT foo. import package:lib…...

34、web前端开发之JavaScript(三)

十. DOM操作详解 1、DOM简介 文档对象模型&#xff08;DOM&#xff0c;Document Object Model&#xff09;是JavaScript与网页内容交互的接口。它将HTML文档表示为一种树状结构&#xff08;DOM树&#xff09;&#xff0c;其中每个节点代表文档的一部分&#xff08;例如元素、…...

自适应卡尔曼滤波

目录 自适应卡尔曼滤波 自适应卡尔曼滤波 主要作用,去抖动 AdaptiveKalmanFilter.py import cv2 import numpy as np from collections import deque# ------------------ 核心去抖算法 ------------------ import cv2 import numpy as np from collections import deque#…...

EIP-712:类型化结构化数据的哈希与签名

1. 引言 以太坊 EIP-712: 类型化结构化数据的哈希与签名&#xff0c;是一种用于对类型化结构化数据&#xff08;而不仅仅是字节串&#xff09;进行哈希和签名 的标准。 其包括&#xff1a; 编码函数正确性的理论框架&#xff0c;类似于 Solidity 结构体并兼容的结构化数据规…...

Day 3:Leetcode 比特位计数+只出现一次的数字 II

比特位计数 本质是一个递推&#xff0c;时间复杂度O(n)&#xff0c;空间复杂度O(n)。 class Solution { public:vector<int> countBits(int n) {vector<int> ans(n 1);ans[0] 0;//ans[1] 1;for(int i 1; i < n; i){if(i & 1){ans[i] ans[i/2] 1;}else…...

CentOS7安装conda

root用户登录虚拟机后更新yum yum update 下载Miniconda&#xff0c;路径就在/root下 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh conda分为Miniconda和Anaconda, Miniconda是Conda的轻量级版本&#xff0c;只包含conda和Python&#xf…...

[Linux]从零开始的vs code交叉调试arm Linux程序教程

一、前言 最近的项目中需要集成rknn的视觉识别&#xff0c;在这之前我并且没有将rknn集成到自己项目的经验。这里我需要在rknn原本demo的基础上我还需要集成自己的业务代码。但是又有一个问题&#xff0c;原本rknn我们都是使用交叉编译编译到开发板上的&#xff0c;并且我们还要…...

【顶刊级科研绘图】AI支持下Nature级数据可视化(如何画图、如何标注、如何改图、如何美化、如何组合、如何排序)

技术点目录 第一章、绘图原则与概念&#xff1a;规范清晰简洁自明第二章、DeepSeek、ChatGPT、R绘图系统&#xff1a;八仙过海各显神通第三章、美学设计与细节&#xff1a;完美图表华丽呈现第四章、数据类型与图表&#xff1a;宝典在手各个击破第五章、统计分析与可视化&#x…...

CSRF跨站请求伪造——入门篇【DVWA靶场low级别writeup】

CSRF跨站请求伪造——入门篇 0. 前言1. 什么是CSRF2. 一次完整的CSRF攻击 0. 前言 本文将带你实现一次完整的CSRF攻击&#xff0c;内容较为基础。需要你掌握的基础知识有&#xff1a; 了解cookie&#xff1b;已经安装了DVWA的靶场环境&#xff08;本地的或云的&#xff09;&am…...

Spring Boot应用中实现Jar包热更新的实践指南

Spring Boot应用中实现Jar包热更新的实践指南 一、引言 在现代软件开发中&#xff0c;快速迭代和持续交付是至关重要的。对于基于Spring Boot的应用程序&#xff0c;一旦部署到生产环境&#xff0c;传统的更新方式通常是重新打包并重启应用&#xff0c;这不仅耗时&#xff0c…...

JVM深入原理(七)(一):运行时数据区

目录 7. JVM运行时数据区 7.1. 运行时数据区-总览 7.2. 运行时数据区-查看内存对象 7.3. 运行时数据区-程序计数器 7.3.1. 程序计数器-作用 7.3.2. 字节码指令执行流程 7.4. 运行时数据区-Java虚拟机栈 7.4.1. 栈-概述 7.4.2. 栈帧-组成 7.4.2.1. 栈帧-帧数据 7.4.2…...

约瑟夫环的四种(数组,链表,递归,迭代)解决方案,与空间、时间复杂度分析

以下方法均没有考虑结果集的空间与时间复杂度 1.数组解法 实现代码&#xff08;未优化&#xff09; class Main {public static void main(String[] args){Scanner read new Scanner(System.in);int n read.nextInt();int m read.nextInt();int[] people new int[n]; //…...

skynet.start 的作用详细解析

目录 skynet.start 的作用详细解析1. 功能概述2. 基本用法3. 关键作用(1) 注册消息处理函数(2) 启动事件循环(3) 服务生命周期管理 4. 与其他函数的协作5. 未调用 skynet.start 的后果6. 高级场景&#xff1a;何时不需要 skynet.start7. 总结 skynet.start 的作用详细解析 在 …...

Apache Doris 2025 Roadmap:构建 GenAI 时代实时高效统一的数据底座

在全球 290 位开发者的协作下&#xff0c;Apache Doris 在 2024 年完成了 7000 次代码提交&#xff0c;并发布了 22 个版本&#xff0c;实现在实时分析、湖仓一体和半结构化数据分析等核心场景的技术突破及创新。 2025 年&#xff0c;Apache Doris 社区将秉承“以场景驱动创新…...

springboot+easyexcel实现下载excels模板下拉选择

定义下拉注解 Target(ElementType.FIELD) Retention(RetentionPolicy.RUNTIME) public interface ExcelDropDown {/*** 固定下拉选项*/String[] source() default {};/*** 动态数据源key&#xff08;从上下文中获取&#xff09;*/String sourceMethod() default "";…...

vue3+ts+element-plus 开发一个页面模块的详细过程

目录、文件名均使用kebab-case&#xff08;短横线分隔式&#xff09;命名规范 子组件目录&#xff1a;./progress-ctrl/comps 1、新建页面文件 progress-ctrl.vue <script setup lang"ts" name"progress-ctrl"></script><template>&l…...

软考《信息系统运行管理员》- 7.1 物联网运维

物联网的概念及特征 物联网是在计算机互联网的基础上&#xff0c;通过射频识别 (RFID) 、 无线传感器、红外感应器、 全球定位系统、激光扫描器等信息传感设备&#xff0c;按约定的协议&#xff0c;把物与物之间通过网络连接起来&#xff0c; 进行信息交换和通信&#xff0c;以…...