作业1
P33 1.5
编写一个程序,能够询问用户的姓名,并读取用户所输入的内容。请确保用户输入的名称长度大于两个字符。如果用户的确输入了有效名称,就响应一些信息。请以两种方式实现:第一种使用C-style字符串,第二种使用string对象。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#include "bits/stdc++.h"using namespace std;set<string> v1;set<char *> v2;int query1() { char s[105]; scanf("%s", s); if (strlen(s) <= 2) { return -1; } if (v2.count(s)) { return 1; } else { ...
web前端大作业报告
准备工作
环境配置
安装git,用于维护工程代码,方便回滚
安装nodejs,这是vue必备的开发环境
安装@vue/cli脚手架,输入以下命令npm i -g @vue/cli
启动vue自带的图形化项目管理界面,输入以下命令vue ui
关于vue脚手架
页面上方有一个 vue 项目管理器,在那里进行创建,创建可以指定路径,如:打算在 E 盘 vue 文件夹创建,输入:E:\vue\。
预设选择vue3
对于插件,router 插件与 vuex 插件 (实现多个组件之间维护同一组数据,类似于 redux),两个都有安装按钮
对于依赖,安装bootstrap,用于方便的使用css代码。(也可以了解下element-plus这段插件)
vue框架的结构
views: 写各种页面
router: 初始状态下有两个路由,/,about
components: 存储组件
main.js 入口,整个组件挂载到 app 元素上
注:后端渲染与前端渲染
后端渲染:每打开一个页面,服务器发送请求并且返回回来
前端渲染;只有在第一次打开(无论是什么 ...
vercel加速
写在前面
githubpages的访问速度非常慢,这里提供一种免费的加速方法,那就是vercel。vercel是类似于githubpages的一个托管平台,但它要更好更快。本站评论区的加速也是用vercel来做的。
强烈建议拥有自己的域名后再操作
域名加速
进入vercel官网,使用你的github账号注册。注册完后把你的博客仓库导入进来。
导入的过程一路默认即可。
最后点击deploy即可完成部署。
绑定域名
加速是完成了,但是vercel提供的域名比github还长还难用,所以再进行一步操作:把自己的域名绑定上去。
点击Domains,去设置域名绑定。
导入两个域名:www.自定义域名和自定义域名。
然后就会发现报错了。不要慌张。
修改DNS
Vercel会提示你加两条解析,并且把方法都告诉你了。
进入自己的域名控制台。记得原先添加了两条解析吗,这次咱们新增一条解析,修改一条解析。
IP地址那条解析,原先的IP地址改成Vercel给你提供的IP地址。
新增一条记录类型为CNAME,主机记录为www,记录值为cname.vercel-dns.com的记录。
如果设置正确 ...
githubpages更换域名
写在开头
使用githubpages部署博客的网址是xxxx.github.io,太捞了,想换个域名很正常。本文章就基于这个介绍,githubpages换成自定义域名的教程。
购买域名
由于服务器是放在github上的,也就是国外服务器,所以买域名是不用备案的。
(如果要使用国内厂商的cdn加速的话还是要备案的)。
总之,买一个自己的专属域名,本章不重点介绍。后缀选啥应该都没什么区别,博主用的top,逼格高又便宜。
域名解析
买完域名后,进入域名控制台,在操作一栏中点击解析。我们要在这里添加两条记录。
记录1
打开自己的cmd终端,输入命令ping yourname.github.io获取ip地址,大概长这样:xxxx.xxxx.xxxx.xxx
返回域名控制台,点击添加记录,选择
记录类型:A
主机记录:@
记录值:刚才得到的IP地址
记录2
返回域名控制台,点击添加记录,选择
记录类型:CNAME
主机记录:www
记录值:yourname.github.io
添加以上两条记录完毕后,如果状态都显示正常,说明就成功了。
Github设置
进入github管理静态 ...
C++实验2
实验内容
利用C++语言,参考教材,实现Shape程序开发与测试,包括各种图形对象的定义,在主函数中实现图形对象的添加、删除操作。具体技术内容包括
派生层次设计
虚函数定义及纯虚函数的定义
虚析构函数的定义
结合虚函数理解多态的概念
给出实验结果截图及实验分析
实验原理
派生
系统提供了相当多的已定义好的基类,用户可以根据具体的应用,在已有类的基础上构架新类,在派生类中,可以直接使用父类部分的代码,但却不需要重新编写父类的代码。这样可以加速软件开发的速度,保障软件开发的质量。继承提供了在已有类的基础上开发出新类的机制,可以节省重复代码的编写工作,是软件重用的基础。
派生结构图
虚函数
虚函数,就是在基类声明函数是虚拟的,在派生类中才正式定义的函数。虚函数的作用就是在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。
虚函数 是在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。
我们想要的是在程序中任意点可以根据所调用的对象类型来选择调用的函数,这种操作被称为 ...
C++实验1
实验内容
利用C++语言,参考教材,实现Triangular类开发与测试,包括:
构造函数、析构函数
数据成员定义、函数成员定义
利用运算符重载技术,实现Iterator
给出实验结果截图及实验分析
实验原理
2.1 类的基本结构包含哪些部分
关键字,类名,访问修饰符,变量,方法。
类定义是以关键字 class 开头,后跟类的名称。类的主体是包含在一对花括号中。类定义后必须跟着一个分号或一个声明列表。
关键字 public 确定了类成员的访问属性。在类对象作用域内,公共成员在类的外部是可访问的。您也可以指定类的成员为 private 或 protected。
2.2 构造函数、析构函数的特点、用法分析
类的构造函数是一种特殊的函数,在创建一个新的对象时调用。类的析构函数也是一种特殊的函数,在删除所创建的对象时调用。
构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。
析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序 ...
数据结构模板-下
线段树
普通线段树
区间合并
单点修改和查询区间内最大的连续子段和(有负数)
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182int n, m;int a[MAXN];struct segmentnode { int l, r; ll sum, lmx, rmx, mx; //mx表示最大区间和,lsum表示最大前缀和,rsum表示最大后缀和} tree[MAXN << 2];void pushup(int rt) { int suml = tree[rt << 1].mx; int sum = tree[rt << 1].rmx + tree[rt << 1 | 1].lmx; int sumr = tree[rt ...
动态规划模板-下
状态机模型
对于状态机而言,如果上一个状态合法,而且可以转移到当前状态,那么这个转移合法。状态机的转移,就类似于图中两个点连边。主要是判断这个转移是否合法, 如果合法,就添加边。
以没有上司的舞会这题为例,当前上司不参加对应两种状态:其下属参加和下属不参加都是合法的。当前上次参加对应两种状态:其下属参加和下属不参加,那么第一种状态就是非法的。
题目: 街道上有 nnn 家店铺,第 iii 家店铺的财产是 a[i]a[i]a[i] 。小偷不能连续偷两个相邻的店铺。求小偷能获得的最大财产。
如果要偷第 iii 家店铺,那么第 i−1i-1i−1 个店铺不能被偷,因为这是非法的,此时
dp[1][i]=max(dp[1][i−2],dp[0])+a[i]dp[1][i] = max(dp[1][i - 2], dp[0]) + a[i]dp[1][i]=max(dp[1][i−2],dp[0])+a[i]
否则的话
dp[0][i]=max(dp[1][i−1],dp[0][i−1])dp[0][i] = max(dp[1][i - 1], dp[0][i - 1])dp[0][i]=ma ...
拓扑排序-下
旅行计划 (拓扑+DP板子)传送
小明要去一个国家旅游。这个国家有 NNN 个城市,编号为 111 至 NNN ,并且有 MMM 条道路连接着,小明准备从其中一个城市出发,并只往东走到城市 iii 停止。
所以他就需要选择最先到达的城市,并制定一条路线以城市 iii 为终点,使得线路上除了第一个城市,每个城市都在路线前一个城市东面,并且满足这个前提下还希望游览的城市尽量多。
现在,你只知道每一条道路所连接的两个城市的相对位置关系,但并不知道所有城市具体的位置。现在对于所有的iii ,都需要你为小明制定一条路线,并求出以城市 iii 为终点最多能够游览多少个城市。
分析:
状态转移和那道最长路有点像,而且权值还是1,反而更简单了 这居然是个绿题
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778#include<bits/stdc++.h& ...
attacklab-ctarget
简介
Attack Lab 的内容针对的是 CS-APP 中第三章中关于程序安全性描述中的栈溢出攻击。在这个 Lab 中,我们需要针对不同的目的编写攻击字符串来填充一个有漏洞的程序的栈来达到执行攻击代码的目的,攻击方式分为代码注入攻击与返回导向编程攻击。
实验目的
官方文档https://csapp.cs.cmu.edu/3e/attacklab.pdf
这次实验的文件有点多,一一介绍下。具体东西还得参考cmu给出的实验文档,本实验没有该文档几乎都不知道自己该干什么。
讲义中首先给我们展示了导致程序漏洞的关键:getbuf 函数。
123456unsigned getbuf(){ char buf[BUFFER_SIZE]; Gets(buf); return 1;}
getbuf 函数在栈中申请了一块 BUFFER_SIZE 大小的空间,然后利用这块空间首地址作为 Gets 函数的参数来从标准输入流中读取字符。由于没有对读入字符数量的检查,我们可以通过提供一个超过 BUFFER_SIZE 的字符串来向 getbuf 的栈帧之外写入数据。
在代 ...