【前端】前后端通信方法与差异(未完待续)

news2025/1/23 21:28:04

系列文章

【Vue】vue增加导航标签
本文链接:https://blog.csdn.net/youcheng_ge/article/details/134965353

【Vue】Element开发笔记
本文链接:https://blog.csdn.net/youcheng_ge/article/details/133947977

【Vue】vue,在Windows IIS平台部署
本文链接:https://blog.csdn.net/youcheng_ge/article/details/133859117

【Vue】vue2与WebApi跨域CORS问题
本文链接:https://blog.csdn.net/youcheng_ge/article/details/133808959

【Vue】nvm安装教程(解决npm下依赖包版本冲突)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/132896207

【Vue】vue开发环境搭建教程(详细)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/132689006

【Vue】日期格式化(全局)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/135017332

【Vue】elementUI表格,导出Excel
本文链接:https://blog.csdn.net/youcheng_ge/article/details/135018489

【Vue】el-date-picker日期范围组件(本周、本月、上周)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/135088143


文章目录

  • 系列文章
  • 前言
  • 一、技术介绍
    • 1.1 axios通信
    • 1.2 ajax通信
    • 1.3 XMLHttpRequest通信
    • 1.4 WebSockets通信
    • 1.5 Shell通信
  • 二、项目源码
    • 2.1 axios通信
      • 2.1.1 data中定义URL变量
      • 2.1.2 methods中定义通信方法
      • 2.1.3 main.js中全局引入
      • 2.1.4 axios发送数据
      • 2.1.5 axios接收数据
    • 2.2 ajax通信
      • 2.2.1 ajax通信库
      • 2.2.2 ajax发送数据
      • 2.2.3 ajax接收数据
    • 2.3 shell通信
      • 2.3.1 shell发送请求
      • 2.3.2 shell接收请求
  • 三、效果展示
    • 3.1 axios效果
    • 3.2 ajax效果
    • 3.3 shell效果
  • 四、资源链接


前言

本专栏为【Vue】,主要介绍Vue知识点。对于刚刚进入计算机世界的大学生来说,这里普及一个知识:HTML已经不仅仅只能开发 Web,也可以开发 AndroidiOS ,所以本文也会介绍 移动端开发。
我个人将安卓开发,分为两大方向:

①原生开发
使用安卓开发工具包(Android SDK)和Java编程语言来开发App的方式。原生开发允许开发者充分利用安卓平台的功能和特性,以及庞大的安卓开发社区资源。但是缺点就是对入门的门槛高,测试繁琐需要适配不同屏幕,对开发人员技术要求高。

②混合开发(加壳方式)
使用Web技术(网页三剑客HTML、CSS和JavaScript)开发App的方式。混合开发具有较高的开发效率和跨平台的优势,由于使用Web技术 界面渲染、不同屏幕适配(使用栅格技术)效果好。但是缺点就是对底层硬件调用库尚不完善,不过在不断完善中,常用的相机、相册、GPS、存储调用是没有问题的。

Vue是前端开发中的一个分支,学习Vue之前不可以速成,得先学会网页三剑客(HTML、CSS和JavaScript),因为Vue中依旧会使用到这些技术,Vue它不够是一种新的编程思想 组件化开发MVVM(数据双向绑定)

在这里插入图片描述

一、技术介绍

本文介绍前后端交互方法与差异,分享我项目中采用的 通信方法,分析它们参数的不同,以及接受参数注意点。

1.1 axios通信

描述:Axios(ajax i/o system)是一个基于 promise的网络请求库,相比于原生的XMLHttpRequest对象来说,简单易用;相比于jQuery,axios包尺寸小且提供了易于扩展的接口,是专注于网络请求的库。符合最新的ES规范。
使用技术:XMLHttpReques
使用范围:主要用于node.js的项目中
我的项目:我在vue项目使用,request.js 也是对 axios 封装。

1.2 ajax通信

描述:Ajax即Asynchronous Javascript And XML(异步JavaScript和XML),使用Ajax技术可以实现网页局部刷新
使用技术:XMLHttpReques
使用范围:一些原生HTML项目用的比较多
我的项目:手持端,安卓的开发,我使用的ajax通信。

1.3 XMLHttpRequest通信

后期补充
使用技术:XMLHttpReques

1.4 WebSockets通信

我暂时没有使用过,用到时补充

1.5 Shell通信

描述:shell终端通信,最初基于Linux脚本。我也不知道怎么描述,前端采用shell及其少,网络上的资料更少了,反正我们直接看代码吧,日后有资料了,我在补充。
使用技术:TCP/UDP
使用范围:暂无
我的项目:网上使用shell通信极其少,我用于外壳通信,外壳是windowform,我需要调用打印机。

二、项目源码

2.1 axios通信

具体参数可以查阅官网吧,我这里对 axios进行封装,定义成全局方法,为了项目使用的方便。

位置:src\utils\baseclass.js
代码:使用的vue开发的。

2.1.1 data中定义URL变量

SERVER_ADDRESS: CONFIG_URL.PLATFROM_CONFIG.baseURL,

CONFIG_URL.PLATFROM_CONFIG.baseURL 就是文件的URL地址,将文件放在 public目录下,不会被打包,节省很多事,你也不用考虑什么跨越代理转发(URL替换)等问题。
在这里插入图片描述
详情可以阅读下文:
【Vue】vue2与WebApi跨域CORS问题
本文链接:https://blog.csdn.net/youcheng_ge/article/details/133808959

2.1.2 methods中定义通信方法

    // 函数内容:发送消息
    // 函数版本: 0.0.0.1
    // 修改时间: 2023.08.01
    // ================================================
    // 注意事项
    // 1.
    // ================================================
    WebApiSendMessage(data) {
      // 发送消息
      return axios({
        url: this.SERVER_ADDRESS + '/Message',
        method: 'post',
        headers: { 'content-type': 'application/json; charset=utf-8' },
        data: data
      }).catch((err) => {
        if (err.response) {
          // 请求成功发出且服务器也响应了状态码,但状态代码超出了 2xx 的范围
          // 弹出提示
          MessageBox.confirm('请求成功发出且服务器也响应了状态码,但状态代码超出了 2xx 的范围', {
            title: '信息提示',
            confirmButtonText: '确定',
            showCancelButton: false
          })
        } else if (err.request) {
          // 请求已经成功发起,但没有收到响应
          // `err.request` 在浏览器中是 XMLHttpRequest 的实例,
          // 而在node.js中是 http.ClientRequest 的实例

          // 弹出提示
          MessageBox.confirm('请求已经成功发起,但没有收到响应', {
            title: '信息提示',
            confirmButtonText: '确定',
            showCancelButton: false
          })
        } else {
          // 发送请求时出了点问题
          console.log('err', err.message)

          // 弹出提示
          MessageBox.confirm('发送请求时出问题', {
            title: '信息提示',
            confirmButtonText: '确定',
            showCancelButton: false
          })
        }
      })
    },

2.1.3 main.js中全局引入

// 全局混入自定义类
import baseclass from './utils/baseclass'
Vue.mixin(baseclass)

2.1.4 axios发送数据

代码解析:
1、onSubmit()就是页面提交按钮,rule经过规则验证没有问题后,执行SaveData()方法

// 提交数据
onSubmit() {
      this.$refs['postForm'].validate(valid => {
        if (valid) {
          this.SaveData()
        }
      })
    },
    SaveData() {
      // 消息数据
      const data = new this.WebApiData(1507)
      var postTable = []

      // 裸砂原料信息表
      var T_info = []
      T_info.push({
        裸砂原料编号: this.postForm.裸砂原料编号,
        报废备注: this.postForm.明细表[0].备注
      })
      // 裸砂半成品信息表
      var T_halfInfo = []
      const detaillength = this.postForm.明细表.length
      for (let i = 0; i < detaillength; i++) {
        let item = this.postForm.明细表[i]
        T_halfInfo.push({
          公司编号: this.postForm.公司编号,
          // 工厂名称: undefined,
          // 存货编码: undefined,
          // 采购订单编号: undefined,
          // 领用申请单编号: undefined,
          // 销售订单编号: undefined,
          // 供应商编号: undefined,
          裸砂原料编号: this.postForm.裸砂原料编号,
          待提存裸砂编号: this.postForm.待提纯裸砂编号,
          待分选裸砂编号: this.postForm.待分选裸砂编号,
          裸砂半成品编号: undefined,
          裸砂半成品类型: undefined,
          砂规格: item.砂规格,
          砂型号: item.砂型号,
          当前重量: item.当前重量,
          分选机编号: item.分选机编号
        })
      }

      // 裸砂分选流程表
      var T_flow = []
      for (let i = 0; i < detaillength; i++) {
        let item = this.postForm.明细表[i]
        T_flow.push({
          公司编号: this.postForm.公司编号,
          裸砂原料编号: this.postForm.裸砂原料编号,
          待提纯裸砂编号: this.postForm.待提纯裸砂编号,
          待分选裸砂编号: this.postForm.待分选裸砂编号,
          待分选裸砂重量: this.postForm.待分选裸砂重量,
          分选开始时间: this.postForm.分选开始时间,
          分选开始录入时间: this.postForm.分选开始录入时间,
          分选开始人编号: this.postForm.分选开始人编号,
          分选开始备注: this.postForm.分选开始备注,
          裸砂半成品规格: item.砂规格,
          裸砂半成品编号: undefined,
          裸砂半成品重量: item.当前重量,
          分选机编号: item.分选机编号,
          分选结束备注: item.备注,
          分批数量: detaillength
        })
      }

      //表
      postTable.push(
        T_info
      )
      postTable.push(
        T_halfInfo
      )
      postTable.push(
        T_flow
      )
      data.table = postTable

      // 发送消息
      this.WebApiSendMessage(data).then((result) => {
        console.log(result)
        this.MessageHandle(result)
      })
    },

2.1.5 axios接收数据

代码解析:
1、MessageHandle(result)接收后台返回的数据,注意看这里是 result.data

    // 返回消息处理
    MessageHandle(result) {
      // 数据解构
      const { sn, success, errCode, errMsg, data, keyValue, table } = result.data
      // 显示返回信息
      this.ShowMessage(errMsg)
      switch (sn) {
        case 1507:
          if (success) {
            this.reset()
            //执行打印任务,等外壳打印
            this.PrintHandle(data,104)
          } else {
            this.ShowMessage(errMsg)
          }
          break

        default:
          break
      }
    },

2.2 ajax通信

需要特别说明一下,原生jQuery下的ajax需要解决跨越问题,并且代码不够简洁。
而我使用的是 api.js 下的 ajax,不用过多理解,使用方法和参数几乎一模一样的,它仅仅是解决跨越问题,以及优化通信代码。

2.2.1 ajax通信库

位置:script\api.js
代码:原生HTML开发的,APICloud官网提供的库api.js 下载,或者查看我的底层库专栏。

2.2.2 ajax发送数据

代码解析:
1、Btn_OK 提交按钮,就是数据构造代码。
2、Content-Type是必须的,否则后端无法识别。

		Btn_OK: function () {
			const technologyId = model.data.daifenxuanluoshabianhao.trim();
			if (technologyId == "") {
				ShowToast("带分选裸砂编号,不为空!");
				return;
			}
			if (model.data.shaguige.trim() == "") {
				ShowToast("砂规格,不为空!");
				return;
			}
			if (model.data.fenxuanjibianhao.trim() == "") {
				ShowToast("分选机编号,不为空!");
				return;
			}
			if (Number(model.data.桶数) <= 0) {
				ShowToast("桶数,必须大于0!");
				return;
			}

			var postTable = [];
			// 裸砂原料信息表
			var T_info = [];
			T_info.push({
				裸砂原料编号: model.data.luoshayuanliaobianhao,
				报废备注: model.data.fenxuanjieshubeizhu
			});

			// 裸砂半成品信息表
			var T_halfInfo = []
			const detaillength = Number(model.data.tongshu);
			for (let i = 0; i < detaillength; i++) {
				T_halfInfo.push({
					公司编号: model.data.gongsibianhao,
					裸砂原料编号: model.data.luoshayuanliaobianhao,
					待提存裸砂编号: model.data.daitichunluoshabianhao,
					待分选裸砂编号: model.data.daifenxuanluoshabianhao,
					裸砂半成品编号: undefined,
					裸砂半成品类型: undefined,
					砂规格: model.data.shaguige,
					砂型号: model.data.shaxinghao,
					当前重量: model.data.dangqianzhongliang,
					分选机编号: model.data.fenxuanjibianhao
				})
			}

			// 裸砂分选流程表
			var T_flow = [];
			for (let i = 0; i < detaillength; i++) {
				T_flow.push({
					公司编号: model.data.gongsibianhao,
					裸砂原料编号: model.data.luoshayuanliaobianhao,
					待提纯裸砂编号: model.data.daitichunluoshabianhao,
					待分选裸砂编号: model.data.daifenxuanluoshabianhao,
					待分选裸砂重量: model.data.daifenxuanluoshazhongliang,
					分选开始时间: model.data.fenxuankaishishijian,
					分选开始录入时间: model.data.fenxuankaishilurushijian,
					分选开始人编号: model.data.fenxuankaishirenbianhao,
					分选开始备注: model.data.fenxuankaishibeizhu,
					裸砂半成品规格: model.data.shaguige,
					裸砂半成品编号: undefined,
					裸砂半成品重量: model.data.dangqianzhongliang,
					分选机编号: model.data.fenxuanjibianhao,
					分选结束备注: model.data.fenxuanjieshubeizhu,
					分批数量: model.data.tongshu
				});
			}
			postTable.push(
				T_info
			);
			postTable.push(
				T_halfInfo
			);
			postTable.push(
				T_flow
			);
			let data = {
				SN: 1507,
				userID: 'gyc',
				password: '123',
				clientIP: '127.0.0.1',
				windowsPCName: 'DESKTOP-95GJUJ1',
				windowsUserName: 'gyc',
				keyValue: {},
				table: postTable
			};
			model.SaveData(data);
		},

		SaveData: function (data) {
			api.showProgress({
				style: 'default',
				animationType: 'fade',
				title: '数据保存中,请稍候...',
				text: '',
				modal: true
			});

			//保存数据
			api.ajax({
				url: API_HOST + '/Api/Message',
				method: 'post',
				headers: {
					'Content-Type': 'application/json;charset=utf-8',//必须,否则后端无法识别
				},
				timeout: 180,
				returnAll: false,
				data: {
					body: data
				}
			}, function (ret, err) {
				api.hideProgress();
				if (ret) {
					MessageHandle(ret)
				}
				else {
					ShowToast(err.msg);
				}
			});
		}
	});

2.2.3 ajax接收数据

代码解析:
1、MessageHandle(result)后端返回数据的处理,注意看这里是 result,没有data层级。

	// 返回消息处理
	function MessageHandle(result) {
		// 数据解构
		const { sn, success, errCode, errMsg, data, keyValue, table } = result;

		// 显示返回信息
		ShowToast(errMsg);

		switch (sn) {
			case 1507:
				if (success) {
					reset();
					//执行打印任务,等外壳打印
					// if (this.bShowFX) {
					//   // 分选,出待分选标
					//   this.PrintHandleFX(data)
					// } else {
					//   // 不分选,出半成品标
					//   this.PrintHandleBCP(data)
					// }
				} else {
					ShowToast(errMsg);
				}
				break;

			default:
				break;
		}
	}

2.3 shell通信

2.3.1 shell发送请求

代码解析:
1、Shell.post()向外壳发送数据

 /**
  * 打印方法
  */
 PrintHandle(table,sn) {
   // 消息数据
   const data = new this.WebApiData(sn)

   // 转换格式,List<DataTable>
   var postTable = []
   postTable.push(
     table
   )
   data.table = postTable

   // 向外壳发送消息
   const strJSON = Shell.post(JSON.stringify(data))
 },

2.3.2 shell接收请求

//网页浏览器
public ChromiumWebBrowser browser;

CefSettings cefSetting = new CefSettings();
Cef.Initialize(cefSetting);
// 注册JsObj对象,实现JS调用C#
CefSharpSettings.WcfEnabled = true;
browser = new ChromiumWebBrowser(str_url);
browser.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true;
browser.JavascriptObjectRepository.Register("Shell", new JavaScriptFunction(this),
    isAsync: false, options: BindingOptions.DefaultBinder);
public string post(string strJSON)
{
	//数据初始化
	BaseWebApiDataReceive webApiData = JsonConvert.DeserializeObject<BaseWebApiDataReceive>(strJSON);
}

三、效果展示

3.1 axios效果

在这里插入图片描述

3.2 ajax效果

在这里插入图片描述

3.3 shell效果

效果看不到了,我打个断点,看一下前端传来的数据。
在这里插入图片描述
在这里插入图片描述

四、资源链接

(未完待续)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1330159.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux--编写系统服务脚本

编写一个名为myprog的系统服务脚本&#xff0c;通过位置变量s1指定的start、stop、restart、status控制参数&#xff0c;分别用来启动、停止、重启sleep进程&#xff0c;以及查看sleep进程的状态。其中&#xff0c;命令sleep用来暂停指定秒数的时间&#xff0c;这里仅用做测试&…

最新ChatGPT网站系统源码+AI绘画系统+支持GPT语音对话+详细图文搭建教程/支持GPT4.0/H5端系统/文档知识库

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

关于增强监控以检测针对Outlook Online APT活动的动态情报

一、基本内容 2023年6月&#xff0c;联邦民事行政部门&#xff08;FCEB&#xff09;在其Microsoft 365&#xff08;M365&#xff09;云环境中发现了可疑活动。该机构迅速向Microsoft和网络安全和基础设施安全局&#xff08;CISA&#xff09;报告了此情况。经过深入调查&#x…

【内存泄漏】编码实现内存泄漏检测功能

编码实现内存泄漏检测功能 使用脚本统计 meminfo 判断是否有内存泄漏 使用 bash 或 python 脚本循环抓取指定进程的 meminfo 保存到 txt 文件&#xff1b;使用 python 脚本解析出txt 文件中的 PSS 信息&#xff0c;借助 pyecharts 或其他可视化三方库将数据以折线图可视化&am…

探秘 Python 协程:解锁异步编程的超能力

概要 在 Python 的异步编程领域&#xff0c;协程&#xff08;Coroutines&#xff09;扮演了核心角色。协程提供了一种轻量级的并发编程方式&#xff0c;使得开发者能够有效地处理 I/O 密集型任务和高并发需求。本文旨在深入探讨 Python 中的协程概念&#xff0c;其底层机制及实…

XPM_CDC_SINGLE(UG974)

Parameterized Macro: Single-bit Synchronizer&#xff08;参数化宏&#xff1a;单比特同步器&#xff09; MACRO_GROUP: XPMMACRO_SUBGROUP: XPM_CDCFamilies: UltraScale, UltraScale 1、 Introduction&#xff08;介绍&#xff09; 此宏将一个一位信号从源时钟域同步到目…

MyBatis增删改查基础及其xml文件

目录 一.增删改查基础 1.增 增Insert 获取自增ID 对insert参数进行重命名 2.删 3.改 4.查 1)对MySQL查询结果进行重命名 从MySQL层面--as 从mybatis层面--Results注解 复用Results的定义 2)配置自动转换驼峰命名&#xff08;推荐&#xff09; 二.Mybatis xml配置…

80x86汇编—指令系统

顺序是按照我们老师教的顺序&#xff0c;仅仅作为复习笔记。 汇编入门真的简单&#xff0c;深入难&#xff0c;毕竟学过计组CPU都只寄组的难处&#xff0c;指令系统不在话下了。 MOV 下图说明了一个MOV指令能够从哪里传到哪里&#xff0c;总结成一句话就是&#xff1a;立即数不…

【Linux】进程周边007之进程控制

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.进程创建 2.进程终止 2.…

【MySQL】事务、事务隔离级别、死锁

文章目录 1. 事务1.1 事务的属性 ACID1.2 创建事务1.3 autocommit 2. 并发和锁定2.1 并发问题 3. 事务隔离级别3.1 读未提交3.2 读已提交3.3 可重复读&#xff1a;MySQL的默认事务隔离级别3.4 序列化 4. 死锁 1. 事务 事务&#xff1a;单个工作单元的一组SQL语句。事务中的所有…

【NI-RIO入门】理解Windows、Real Time与FPGA之间数据通信的原理

于NI kb摘录 1.概述 对于NI RIO系列设备&#xff08;CompactRIO、sbRIO、myRIO等&#xff09;进行编程时&#xff0c;需要注意有三个不同的组件。 人机界面 (HMI) 。有时称为“主机”&#xff0c;为用户提供图形用户界面&#xff08;GUI&#xff09;&#xff0c;用于监控系统…

基于SpringBoot简洁优雅的个人博客系统

源代码下载地址&#xff1a; 点击这里下载 项目备注 1、该资源内项目代码都经过测试运行成功&#xff0c;功能ok的情况下才上传的&#xff0c;请放心下载使用&#xff01; 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或…

React学习计划-React16--React基础(四)生命周期和diffing算法,key的作用

1. 生命周期 1. 声命周期的三个阶段&#xff08;旧&#xff09; 初始化阶段&#xff1a;由ReactDOM.render()触发—初次渲染 1. constructor() 2. componentWillMount() 3. render() 4. componentDidMount() > 常用一般在这个钩子中做一些初始化的事情&#xff0c;例如&am…

Javascript知识点锦集

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/135165704 出自【进步*于辰的博客】 文章目录 1、其他知识点链接7、关于 false8、关于 null 与 …

【设计模式】命令模式

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、什么是命令模式&#xff1f; 二、命令模式的优点和应用场景 三、命令模式的要素和实现 3.1 命令 3.2 具体命令 3.3 接受者 …

抖店只能用官方电子面单?2024抖店玩法解读,附面单使用教程

我是王路飞。 正在做抖店的商家&#xff0c;应该都发现一件事情了&#xff0c;那就是现在的抖店好像不让拍单了&#xff0c;只能使用抖音的电子面单&#xff0c;打单发货。 说实话&#xff0c;这种情况已经出现过太多次了&#xff0c;导致很多商家不以为然。 我曾经也说过&a…

Midjourney v6 正式发布,AI创新工坊同步更新

Midjourney v6 开发团队将从2023 年 12 月 21 日今晚开始&#xff0c;在寒假期间让社区测试Midjourney v6模型的 alpha 版本。 要打开它&#xff0c;V6请从提示下方的下拉菜单中选择/settings或--v 6在提示后键入。 Midjourney v6 基本型号有哪些新功能&#xff1f; 更准确的…

受控代码生成-CCS 23

Large Language Models for Code: Security Hardening and Adversarial Testing 1.Introduction2.Background3.受控代码生成4.SVEN4.1.Inference4.2.Training4.2.1.训练样本4.2.2.loss函数 4.3.数据集构建 5.使用场景5.1.安全性增强5.2.对抗测试 6.实验6.1.实验设置6.2.Main Ex…

【数据结构和算法】---栈和队列的互相实现

目录 一、用栈实现队列1.1初始化队列1.2模拟入队列1.3模拟出队列1.4取模拟的队列头元素1.5判断队列是否为空 二、用队列实现栈2.1初始化栈2.2模拟出栈2.3模拟入栈2.4取模拟的栈顶元素2.5判读栈是否为空 一、用栈实现队列 具体题目可以参考LeetCode232. 用栈实现队列 首先要想到…

目标检测应用场景—数据集【NO.24】行人车辆检测数据集2

写在前面&#xff1a;数据集对应应用场景&#xff0c;不同的应用场景有不同的检测难点以及对应改进方法&#xff0c;本系列整理汇总领域内的数据集&#xff0c;方便大家下载数据集&#xff0c;若无法下载可关注后私信领取。关注免费领取整理好的数据集资料&#xff01;今天分享…