【块状链表C++】文本编辑器(指针中 引用 的使用)
》》》算法竞赛
/*** @file * @author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * * @brief 一直在竞赛算法学习的路上* * @copyright 2023.9* @COPYRIGHT 原创技术笔记:转载需获得博主本人同意,且需标明转载源* @language C++* @Version 1.0还在学习中 */
- UpData Log👆 2023.9.23 更新进行中
- Statement0🥇 一起进步
- Statement1💯 有些描述是个人理解,可能不够标准,但能达其意
技术提升站点
文章目录
- 》》》算法竞赛
- 技术提升站点
- 20 块状链表
- 20-1 背景
- 20-2 实现
- 20-2-0 准备工作:指针芝士的储备
- [点击学习 指针、取地址、解引用、引用 相关知识](https://blog.csdn.net/qq_73928885/article/details/133191263?spm=1001.2014.3001.5501)
- 20-2-1 第一步:建立结构
- 20-2-2 第二步:获取信息
- 20-2-3 第三步:定位
- 20-2-4 第四步:对 结点(分块) 的操作
- 20-3 文本编辑器(HDU 4008)
20 块状链表
我认为叫 结点数组 比较好
20-1 背景
块状 的形成使用的就是 分块 的数据结构
分块使用到的 数组结构 可以极大的加速检索
的效率
链表 使用的就是 基础数据结构 链
使用 链 这种结构 进行插入和删除
等修改操作 就较数组 效率更高
基于这两者各自的优势互补下,这种链表串起来的分块可以结合形成一种 检索很快,同时修改效率也很高的 高级数据结构 :块状链表
![](https://img-blog.csdnimg.cn/img_convert/b5630678ba2a78f12b9097790460663e.png)
20-2 实现
根据上图可知,这种数据结构的主体是链表,链上的结点(也就是一个分块)指向一个数组。
20-2-0 准备工作:指针芝士的储备
首先,这里涉及一个
指针
的芝士:指针
*
、取地址&
、解引用*
、引用&
点击学习 指针、取地址、解引用、引用 相关知识
20-2-1 第一步:建立结构
- 动态链表 套 动态数组:就是 l i s t list list 套 v e c t o r vector vector
list<vector<char>> Link; //Link是一条链,链上的 每一个结点 是 一个分块(分块 = 结点!!!)
typedef list<vector<char>>::iterator it; //重定义 迭代器(指针)类型的名字
int block_size=2500; //分块的标准大小
20-2-2 第二步:获取信息
inline int Size(it node){return (node->size());} //返回结点(分块)的大小
inline it Next(it node){return ++node;} //返回下一个分块
20-2-3 第三步:定位
inline it Find(int& pos){ //查找(接收的是pos结点的值),由于又引用pos的地址,所有可以直接对pos的值操作!!!for(register it i=Link.begin();; i++){ //i 是 用于遍历 链表上所有的结点 的指针if(i==Link.end() || pos<=Size(i)) //i 处于所在的结点上 (遍历到末尾,不论如何都认定就在末尾结点 )return i;pos-=(Size(i)); //遍历的最终目的是要获得 目标 在所处分块的排位}
}
20-2-4 第四步:对 结点(分块) 的操作
- 再分块操作
inline void Split(it node,int pos){ //再分块操作:在 node 这个分块的 排位为pos处,将 块 一分为二(小块1,小块2)【pos位置划给小块2】if (pos==Size(node)) //如果 位置pos 是该分块的末尾,则无法进行再分块操作return;Link.insert(Next(node), vector<char>(node->begin()+pos, node->end())); //把 小块2 分给 下一个分块node->erase(node->begin()+pos, node->end()); //清除 小块2(否则会出现重复的现象)
}
- 合并小块
inline void Merge(it node){node->insert(node->end(), Next(node)->begin(), Next(node)->end()); //在 前一个分块 的末尾 接上 下一个分块Link.erase(Next(node)); //清除 被合并的分块(否则会出现重复的现象)
}
- 维护链(块状链表 的 核心)
inline void Update(void){ //修改链上结点后,对链的状态进行更新for(register it i=Link.begin(); i!=Link.end(); i++){while(Size(i)>=(block_size<<1)) //如果 分块 的大小 大于 两个block_size 则要再分块Split(i, Size(i) - block_size);while(Next(i) != Link.end() && Size(i)+Size(Next(i))<=block_size) //(前提:下一个分块不是链的末尾)前后分块大小之和 比 block_size 小,则合并Merge(i);while(Next(i) != Link.end() && Next(i)->empty()) //清除最后一个空块 Link.erase(Next(i)); }
}
补充知识:.insert() 插入(方法)
//插入一个数:向 vector容器 的 pos位置(1) 插入一个数 val(0)
vector<int> arr{1,2};
arr.insert(1,0); //.insert(pos, val)//{0,1,2}//插入一串数:直接向 容器 的pos位置(2,即arr.end()) 插入另一个容器(或其中的部分)
vector<int> arr{1,2}; vector<int> ins{3,4,5};
arr.insert(arr.end(), ins.begin(). ins.end());//{1,2,3,4,5}
- 插入
inline void Insert(int pos, const vector<char>& ch){register it node=Find(pos); //找到 目标 在所处分块的排位if(!Link.empty()) //必须保证 分块 不为空,否则没法进行 再分块 操作Split(node, pos);Link.insert(Next(node), ch); //把 字符 插入两个小块 之间Update();
}
- 删除
inline void Delete(int L, int R){ //两个Split处理的结果只是[L,R),还需一步!!!register it node_l, node_r;//注:传入 Find函数中 的pos值 与 传入 Split函数 的pos值 不同 node_l=Find(L); Split(node_l, L);node_r=Find(R); Split(node_r, R); //注:将 R-1对应的元素 划给 当前的node_r分块 ,而将 R对应的元素划给了 Next(node_r)分块!!!这点很多blog没写清楚node_r++; //右端点while(Next(node_l)!=node_r) //将 node_l到node_r 的 结点依次清除Link.erase(Next(node_l));Update();
}
20-3 文本编辑器(HDU 4008)
题目描述
很久很久以前, D O S 3. x DOS3.x DOS3.x 的程序员们开始对 E D L I N EDLIN EDLIN 感到厌倦。于是,人们开始纷纷改用自己写的文本编辑器⋯⋯
多年之后,出于偶然的机会,小明找到了当时的一个编辑软件。进行了一些简单的测试后,小明惊奇地发现:那个软件每秒能够进行上万次编辑操作(当然,你不能手工进行这样的测试) !于是,小明废寝忘食地想做一个同样的东西出来。你能帮助他吗?
为了明确目标,小明对“文本编辑器”做了一个抽象的定义:
文本:由 0 0 0 个或多个 ASCII 码在闭区间 [ 32 32 32, 126 126 126] 内的字符构成的序列。
光标:在一段文本中用于指示位置的标记,可以位于文本首部,文本尾部或文本的某两个字符之间。
文本编辑器:由一段文本和该文本中的一个光标组成的,支持如下操作的数据结构。如果这段文本为空,我们就说这个文本编辑器是空的。
操作名称 输入文件中的格式 功能 Move ( k ) \text{Move}(k) Move(k) Move k 将光标移动到第 k k k 个字符之后,如果 k = 0 k=0 k=0,将光标移到文本开头 Insert ( n , s ) \text{Insert}(n,s) Insert(n,s) Insert n s 在光标处插入长度为 n n n 的字符串 s s s,光标位置不变 n ≥ 1 n\geq1 n≥1 Delete ( n ) \text{Delete}(n) Delete(n) Delete n 删除光标后的 n n n 个字符,光标位置不变, n ≥ 1 n \geq 1 n≥1 Get ( n ) \text{Get}(n) Get(n) Get n 输出光标后的 n n n 个字符,光标位置不变, n ≥ 1 n \geq 1 n≥1 Prev ( ) \text{Prev}() Prev() Prev 光标前移一个字符 Next ( ) \text{Next}() Next() Next 光标后移一个字符 你的任务是:
建立一个空的文本编辑器。
从输入文件中读入一些操作并执行。
对所有执行过的
GET
操作,将指定的内容写入输出文件。输入格式
输入文件
editor.in
的第一行是指令条数 t t t,以下是需要执行的 t t t 个操作。其中:为了使输入文件便于阅读,
Insert
操作的字符串中可能会插入一些回车符, 请忽略掉它们(如果难以理解这句话,可以参照样例) 。除了回车符之外,输入文件的所有字符的 ASCII 码都在闭区间 [ 32 32 32, 126 126 126] 内。且
行尾没有空格。
这里我们有如下假定:
MOVE
操作不超过 50000 50000 50000 个,INSERT
和DELETE
操作的总个数不超过 4000 4000 4000,PREV
和NEXT
操作的总个数不超过 200000 200000 200000。所有
INSERT
插入的字符数之和不超过 2 M 2M 2M( 1 M = 1024 × 1024 1M=1024\times 1024 1M=1024×1024 字节) ,正确的输出文件长度不超过 3 M 3M 3M 字节。
DELETE
操作和GET
操作执行时光标后必然有足够的字符。MOVE
、PREV
、NEXT
操作必然不会试图把光标移动到非法位置。输入文件没有错误。
对 C++ 选手的提示:经测试,最大的测试数据使用
fstream
进行输入有可能会比使用stdio
慢约 1 1 1 秒。输出格式
输出文件 editor.out 的每行依次对应输入文件中每条
Get
指令的输出。样例输入 #1
15 Insert 26 abcdefghijklmnop qrstuv wxy Move 15 Delete 11 Move 5 Insert 1 ^ Next Insert 1 _ Next Next Insert 4 .\/. Get 4 Prev Insert 1 ^ Move 0 Get 22
样例输出 #1
abcde^_^f.\/.ghijklmno
#include<bits/stdc++.h>
using namespace std;
const int N=1e3;
list<vector<char>> Link; //Link是一条链,链上的 每一个结点 是 一个分块(分块 = 结点!!!)
typedef list<vector<char>>::iterator it; //重定义 迭代器(指针)类型的名字
int block_size=2500; //分块的标准大小
inline int Size(it node){return (node->size());} //返回结点(分块)的大小
inline it Next(it node){return ++node;} //返回下一个分块
/*-----------------定位-----------------------------*/
inline it Find(int& pos){ //查找(接收的是pos结点的值),由于又引用pos的地址,所有可以直接对pos的值操作!!!for(register it i=Link.begin();; i++){ //i 是 用于遍历 链表上所有的结点 的指针if(i==Link.end() || pos<=Size(i)) //i 处于所在的结点上 (遍历到末尾,不论如何都认定就在末尾结点 )return i;pos-=(Size(i)); //遍历的最终目的是要获得 目标 在所处分块的排位}
}/*------------对 结点(分块) 的操作---------------------------*/
inline void Split(it node,int pos){ //再分块操作:在 node 这个分块的 排位为pos处,将 块 一分为二(小块1,小块2)【pos位置划给小块1】if (pos==Size(node)) //如果 位置pos 是该分块的末尾,则无法进行再分块操作return;Link.insert(Next(node), vector<char>(node->begin()+pos, node->end())); //把 小块2 分给 下一个分块node->erase(node->begin()+pos, node->end()); //清除 小块2(否则会出现重复的现象)
}
inline void Merge(it node){node->insert(node->end(), Next(node)->begin(), Next(node)->end()); //在 前一个分块 的末尾 接上 下一个分块Link.erase(Next(node)); //清除 被合并的分块(否则会出现重复的现象)
}inline void Update(void){ //修改链上结点后,对链的状态进行更新for(register it i=Link.begin(); i!=Link.end(); i++){while(Size(i)>=(block_size<<1)) //如果 分块 的大小 大于 两个block_size 则要再分块Split(i, Size(i) - block_size);while(Next(i) != Link.end() && Size(i)+Size(Next(i))<=block_size) //(前提:下一个分块不是链的末尾)前后分块大小之和 比 block_size 小,则合并Merge(i);while(Next(i) != Link.end() && Next(i)->empty()) //清除最后一个空块 Link.erase(Next(i)); }
}inline void Insert(int pos, const vector<char>& ch){register it node=Find(pos); //找到 目标 在所处分块的排位if(!Link.empty()) //必须保证 分块 不为空,否则没法进行 再分块 操作Split(node, pos);Link.insert(Next(node), ch); //把 字符 插入两个小块 之间Update();
}
inline void Delete(int L, int R){ //两个Split处理的结果只是[L,R),还需一步!!!register it node_l, node_r;//注:传入 Find函数中 的pos值 与 传入 Split函数 的pos值 不同 node_l=Find(L); Split(node_l, L);node_r=Find(R); Split(node_r, R); //注:将 R-1对应的元素 划给 当前的node_r分块 ,而将 R对应的元素划给了 Next(node_r)分块!!!这点很多blog没写清楚node_r++; //右端点while(Next(node_l)!=node_r) //将 node_l到node_r 的 结点依次清除Link.erase(Next(node_l));Update();
}inline void Output(int L, int R){register it node_l=Find(L), node_r=Find(R);for(register it pi=node_l;; pi++){int first; pi==node_l ? first=L : first=0;int last; pi==node_r ? last=R : last=Size(pi);for(int i=first; i<last;i++) //打印putchar(pi->at(i));if(pi==node_r) break; //遍历到右边界退出循环}
}int main(void){vector<char> ch; int len,pos,n;cin>>n;while(n--){char op[7]; cin>>op;if(op[0]=='M') cin>>pos; //Move移动操作:将光标移动到第 k 个字符之后if(op[0]=='I'){ //Insert插入操作:在光标处插入长度为 len 的字符串 s,光标位置不变 n>=1ch.clear(); cin>>len; ch.resize(len);for(int i=0;i<len;i++){ch[i]=getchar();while((int)ch[i]<32 || (int)ch[i]>126)//循环直到读到合法数据ch[i]=getchar();}Insert(pos, ch);}if(op[0]=='D'){ cin>>len; Delete(pos, pos+len);} //Delete删除操作:删除光标后的 len 个字符,光标位置不变,n>=1if(op[0]=='G'){ cin>>len; Output(pos, pos+len);} //输出光标后的 len 个字符,光标位置不变,n>=1if(op[0]=='P') pos--; //光标前移一个字符if(op[0]=='N') pos++; //光标后移一个字符}return 0;
}
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/99fbd34895bc7888481c26be832133fb.png#pic_center)
【块状链表C++】文本编辑器(指针中 引用 的使用)
》》》算法竞赛 /*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * * brief 一直在竞赛算法学习的路上* * copyright 2023.9* COPYRIGHT 原创技术笔记:转载…...
![](https://img-blog.csdnimg.cn/5f9840e622364818831353d0ae8b5e25.png)
echarts的Y轴设置为整数
场景:使用echarts,设置Y轴为整数。通过判断Y轴的数值为整数才显示即可 yAxis: [{name: ,type: value,min: 0, // 最小值// max: 200, // 最大值// splitNumber: 5, // 坐标轴的分割段数// interval: 100 / 5, // 强制设置坐标轴分割间隔度(取本Y轴的最大…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
恢复删除文件?不得不掌握的4个方法!
“删除了的文件还可以恢复吗?有个文件我本来以为不重要了,就把它删除了,没想到现在还需要用到!这可怎么办?有没有办法找回来呢?” 重要的文件一旦丢失或误删可能都会对我们的工作和学习造成比较大的影响。怎…...
![](https://www.ngui.cc/images/no-images.jpg)
GitLab CI/CD:.gitlab-ci.yml 文件常用参数小结
文章目录 一、.gitlab-ci.yml 文件作用二、一个简单的.gitlab-ci.yml 文件示例参考 一、.gitlab-ci.yml 文件作用 可以定义跑CI时想要运行的命令或脚本 可以定义job之间的依赖和缓存 可以执行程序部署并定义部署位置 可以定义想要包含的其他配置文件和模版 二、一个简单的.gi…...
![](https://img-blog.csdnimg.cn/7730e04ffaf74c55bd2a37b2133e92ba.png)
MySQL学习笔记9
MySQL数据表中的数据类型: 在考虑数据类型、长度、标度和精度时,一定要仔细地进行短期和长远的规划,另外,公司制度和希望用户用什么方式访问数据也是要考虑的因素。开发人员应该了解数据的本质,以及数据在数据库里是如…...
![](https://img-blog.csdnimg.cn/790555ce97f348ccb1cf9f59683489da.png#pic_center)
从零学习开发一个RISC-V操作系统(三)丨嵌入式操作系统开发的常用概念和工具
本篇文章的内容 一、嵌入式操作习系统开发的常用概念和工具1.1 本地编译和交叉编译1.2 调试器GDB(The GNU Project Debugger)1.3 QEMU模拟器1.4 项目构造工具Make 本系列是博主参考B站课程学习开发一个RISC-V的操作系统的学习笔记,计划从RISC…...
![](https://img-blog.csdnimg.cn/62e919d4e5e44d72a6b267e4a16df931.png)
小米机型解锁bl 跳“168小时”限制 操作步骤分析
写到前面的安全提示 了解解锁bl后的风险: 解锁设备后将允许修改系统重要组件,并有可能在一定程度上导致设备受损;解锁后设备安全性将失去保证,易受恶意软件攻击,从而导致个人隐私数据泄露;解锁后部分对系…...
![](https://www.ngui.cc/images/no-images.jpg)
基础练习 回文数
问题描述 1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。 输出格式 按从小到大的顺序输出满足条件的四位十进制数。 solution1 #include <stdio.h> int main(){int n 1000, n1, n2, n3, n4;while(n &…...
![](https://img-blog.csdnimg.cn/ab373fe3503942e293792da43e475c1d.webp)
解决Spring Boot 2.7.16 在服务器显示启动成功无法访问问题:从本地到服务器的部署坑
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
![](https://www.ngui.cc/images/no-images.jpg)
洛谷P5661:公交换乘 ← CSP-J 2019 复赛第2题
【题目来源】https://www.luogu.com.cn/problem/P5661https://www.acwing.com/problem/content/1164/【题目描述】 著名旅游城市 B 市为了鼓励大家采用公共交通方式出行,推出了一种地铁换乘公交车的优惠方案: 1.在搭乘一次地铁后可以获得一张优惠票&…...
![](https://img-blog.csdnimg.cn/e71aa30eb78a427d97c262e95da4b59b.png)
mysql优化之索引
索引官方定义:索引是帮助mysql高效获取数据的数据结构。 索引的目的在于提高查询效率,可以类比字典。 可以简单理解为:排好序的快速查找数据结构 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这种数据…...
![](https://img-blog.csdnimg.cn/161eec2e78394b95b016cbfa9964027b.png)
文件系统详解
目录 文件系统(1) 第一节文件系统的基本概念 一、文件系统的任务 二、文件的存储介质及存储方式 三、文件的分类 第二节 文件的逻辑结构和物理结构 一、文件的逻辑结构 二、文件的物理结构 文件系统(2) 第三节 文件目…...
![](https://img-blog.csdnimg.cn/383f8d4c8c1849d0bf682c61f053e7c7.png)
有名管道及其应用
创建FIFO文件 1.通过命令: mkfifo 文件名 2.通过函数: mkfifo #include <sys/types.h> #include <sys/stat.h> int mkfifo(const char *pathname, mode_t mode); 参数: -pathname:管道名称的路径 -mode:文件的权限&a…...
![](https://www.ngui.cc/images/no-images.jpg)
加州大学伯克利分校 计算机科学专业
加州大学伯克利分校 计算机科学专业 cs 61a cs 61b cs61c...
![](https://img-blog.csdnimg.cn/img_convert/6b06b8891e32feb4c9ef1b1f85eb8d05.png)
一个关于 i++ 和 ++i 的面试题打趴了所有人
前言 都说大城市现在不好找工作,可小城市却也不好招人。 我们公司招了挺久都没招到,主管感到有些心累。 我提了点建议,是不是面试问的太深了,在这种小城市,能干活就行。 他说自己问的面试题都很浅显,如果答…...
![](https://img-blog.csdnimg.cn/836562506e334b51b993a5428bafdd26.png)
程序员的快乐如此简单
最近在GitHub上发起了一个关于Beego框架的小插件的开源仓库,这一举动虽然看似微小,但其中的快乐和意义却是无法用言语表达的。 Beego是一个开源的Go语言Web框架,它采用了MVC架构模式,并集成了很多常用的功能和中间件。小插件是指…...
![](https://www.ngui.cc/images/no-images.jpg)
浅谈云原生Cloud Native
目录 1.云原生是什么2.云原生与传统软件有什么区别3.云原生有哪些代表性的技术 1.云原生是什么 云原生(Cloud Native)是一种构建和运行应用程序的方法,可以充分利用云计算模型的优势。云原生是一种面向服务的架构(SOA)…...
![](https://img-blog.csdnimg.cn/d3b05ed9aeef43ae88f178cc1cab7e9e.png)
解决react报错“JSX 表达式必须具有一个父元素“
现象如下: 原因: 新插入的dom元素跟已有的dom元素平级了,必须创建一个共有的根元素 解决办法: 使用<> </>标签作为根元素,把所有子元素包裹起来 <> ....原代码 </> 问题解决!…...
![](https://img-blog.csdnimg.cn/1210d1f7cc104c6595abe41f44c9689f.png)
Spring学习笔记7 Bean的生命周期
Spring学习笔记6 Bean的实例化方式_biubiubiu0706的博客-CSDN博客 Spring其实就是一个管理Bean对象的工厂.它负责对象的创建,对象的销毁. 这样我们才可以知道在哪个时间节点上调用了哪个类的哪个方法,知道代码该写在哪里 Bean的生命周期之粗略5步 Bean生命周期的管理可以参考S…...
![](https://www.ngui.cc/images/no-images.jpg)
React 如何导出excel
在现代的Web开发中,数据导出是一个非常常见的需求。而在React应用中,我们经常需要将数据导出为Excel文件,以便用户可以轻松地在本地计算机上查看和编辑。本文将介绍如何在React应用中实现导出Excel文件的功能。 章节一:安装依赖 …...
![](https://img-blog.csdnimg.cn/6487e859c4c74bb5b95e116e225f3824.png)
Texlive2020 for win10 宏包更新
用命令提示符更新texlive的宏包,这个方法非常简单实用 1.以管理员身份打开命令提示符 2.系统自动选择镜像网站 tlmgr option repository ctan 3.更新宏包 tlmgr update --self --all 其中–self参数表示升级tlmgr本身,–all表示升级所有宏包,这样就可以将所有宏包更新了 4.列…...
![](https://img-blog.csdnimg.cn/b7c0619ce8fc49d1962475625d5571ce.png#pic_center)
Ps 在用鼠标滚轮缩放图片时,速度太快?
1.原因 在于安装了第三方鼠标优化软件Mos,它起着对第三方鼠标全局浏览效果的优化,使浏览更加顺滑,而不精确,消除了mac使用第三方鼠标浏览页面时的卡顿问题。这也使得像ps、ai这类软件,在进行页面缩放时,变得…...
![](https://img-blog.csdnimg.cn/bfcda002b5594620afc7abbbd032830b.png)
基于docker进行Grafana + prometheus实现服务监听
基于docker进行Grafana Prometheus实现服务监听 Grafana安装Prometheus安装Jvm监控配置服务器主机监控(基础cpu,内存,磁盘,网络) Grafana安装 docker pull grafana/grafanamkdir /server/grafanachmod 777 /server/grafanadocker run -d -p…...
![](https://www.ngui.cc/images/no-images.jpg)
模型层及ORM介绍
模型层及ORM介绍 模型层 负责跟数据库之间进行通信 配置MySQL,下载MySQLclient 创建数据库 进入mysql数据库执行create database 数据库名 default charset utf8通常数据库名跟项目名保持一致settings.py里进行数据库的配置修改 DATABASES 配置项的内容&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
QQ邮箱怎么设置SMTP接口服务器?
在现如今信息快速传递的时代,邮件已成为我们工作、学习和生活中必不可少的一部分。而作为每位用户必备的一款邮箱,QQ邮箱一直以其稳定、高效、安全的特点深受大家的青睐。但是你是否觉得每次发邮件都需要打开QQ邮箱网页,进行繁琐的操作很是麻…...
![](https://img-blog.csdnimg.cn/6207cba5760d49b59109dcba53493631.png)
【操作系统笔记四】高速缓存
CPU 高速缓存 存储器的分层结构: 问题:为什么这种存储器层次结构行之有效呢? 衡量 CPU 性能的两个指标: 响应时间(或执行时间):执行一条指令平均时间 吞吐量,就是 1 秒内 CPU 可以…...
![](https://www.ngui.cc/images/no-images.jpg)
uniapp获取openid
要获取用户的openid,需要使用微信小程序的登录API。以下是一个简单的示例代码: // 在page中引入wx-login组件 import wxLogin from /components/wx-loginexport default {components: { wxLogin },data() {return {openid: }},methods: {// wxLogin组件…...
![](https://www.ngui.cc/images/no-images.jpg)
测试工程师面试之设计测试用例
以下的问题答案,仅供参考,如小伙伴们有更好的答案,欢迎大家评论区留言,谢谢大家 测试工程师面试之设计测试用例 1、请说一说简单用户界面登陆过程都需要做哪些分析2、 请对此系统设计测试用例:一个系统,多个…...
![](https://img-blog.csdnimg.cn/64f8c96c417047bb83bfa488498d347f.png)
html页面仿word文档样式(vue页面也适用)
目录 文章title: 标题: 正文: 完整代码: 页面效果: 文章title: <div><h3 style"display: flex;justify-content: center; align-items: center; color: #000;">实验室招新报名公…...
![](https://www.ngui.cc/images/no-images.jpg)
如何在控制台打印sql语句
步骤一: log4j2.xml中做以下配置 <logger name"xxx.infrastructure.mysql.mapper"level"debug" additivity"false"><appender-ref ref"Console"/></logger>步骤二:IDEA下载Free Mybatis Plu…...
![](https://img-blog.csdnimg.cn/20190916212459168.png)
网站建设与优化推广方案模板/中国制造网
论文链接:https://arxiv.org/abs/1903.00241?contextcs简介 对于一个深度神经网络来讲,如何评估该网络本身的预测质量是一个有趣并且有难度的任务。 在实例分割中,实例分类的置信得分被用作掩膜质量评估。然而,使用实例掩膜和实…...
![](https://img-blog.csdnimg.cn/58d07877c6a84697b1902f4c759b0418.png)
wordpress登陆后查看/百度应用市场app下载
正点原子开拓者FPGA开发板上自带了一枚无源蜂鸣器,本篇将记录如何通过按键来控制蜂鸣器的开关。 功能描述 初始蜂鸣器不响,按键按一下蜂鸣器开始响,再按一下蜂鸣器停止。 模块结构 本次采用了三个模块,一个顶层模块,…...
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
做映射后 内网无法通过域名访问网站/seo的形式有哪些
题意:学生和课程构成二部图,然后需要找到一个集合每个学生代表一门课,每一门课有一个学生代表。 思路:二分图入门题。当最大匹配等于课程数的时候可以找到集合。 代码如下: 1 /**************************************…...
![](/images/no-images.jpg)
如何自己建立网站/公司如何在百度宣传
Dubbo自定义Filter统一处理异常参考文章: (1)Dubbo自定义Filter统一处理异常 (2)https://www.cnblogs.com/gossip/p/11734654.html 备忘一下。...
![](http://upload-images.jianshu.io/upload_images/2085791-a3593714c18c3b1b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
做自己看视频的网站/免费域名服务器
2019独角兽企业重金招聘Python工程师标准>>> Fiori里的busy dialog有两种表现形式,一种是下图里的花朵形状,由5个不断旋转的花瓣组成。另一种是下图的3/4个圆环不断旋转的效果。 关于前者的效果,可以看我制作的这个视频。这个视频…...
![](https://img-blog.csdnimg.cn/20200608101439473.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE2NzYzOTgz,size_16,color_FFFFFF,t_70)
外国老头做中文网站/seo自然排名
文章目录一 写在开始的简介和弯路(~用处不大,可直接看第二部分哦~)二 session库的准备工作三 实现session的代码逻辑四 session库的代码实现方法1 设置全局变量store(划重点:全局)2 在路由中使用中间件调用…...