- 博客(30)
- 收藏
- 关注
原创 c++ priority_queue 存储自定义数据
//方法1,运算符重载struct cmp1 { int x; cmp1(int a) { x = a; } bool operator<(const cmp1& a) const { return x < a.x; //大根堆 }};//方法2;重写仿函数struct cmp2 { bool operator ()(cmp1 a, cmp1 b) { return a.x < b.x;
2021-03-23 19:08:02
440
2
原创 小小的vector size函数也有大大的坑!!!
C++ vector 的size函数返回vector大小,返回值类型为unsigned int型,unsigned int的取值范围为0~2^32 -1。vectorA={};当容器A为空时,如果直接使用A.size()-1的话,会直接造成溢出,得到的结果并不是-1,而是一个很大的数。所以为了避免发生溢出的情况,需要正确使用size方法。解决办法一:int size = A.size();解决办法二:(int)A.size()为了方便使用,我比较推荐方法一。...
2020-12-16 10:31:38
3152
2
原创 OVS+RYU控制器实现源IP地址和源端口转换
OVS+RYU控制器实现源IP地址和源端口转换目录OVS+RYU控制器实现源IP地址和源端口转换前言一、OpenVswitch安装二、RYU控制器安装三、docker安装四、实验4.1 实验一:同网段的ip地址修改4.1.1创建网桥4.1.2 无网络启动docker容器2.读入数据总结前言本文通过RYU控制器对Open vSwitch交换机下发流表,实现了将连接在Open VSwitch的机器的源ip地址和源端口转换成其他ip地址和任意端口的功能,本文实验只是简单的NAT转换,读者可以在本文的基础
2020-12-07 20:56:39
2159
4
原创 RYU控制器安装
(1)安装python3.6sudo add-apt-repository ppa:fkrull/deadsnakes sudo apt-get updatesudo apt-get install python3.6(2)设置python3为默认版本sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100sudo update-alternatives --install /usr/bin
2020-12-07 20:55:21
509
原创 C++ string类的insert函数的介绍及使用
1.在特定位置插入const char *字符串(1)string &insert(int p0, const char *s)功能:在原字符串下标为pos的字符前插入字符串str返回值:插入字符串后的结果(2)string &insert(int p0, const char *s, int n);功能:在p0位置插入字符串s的前n个字符返回值:插入字符串后的结果 string str1="Working people "; string str2="Wor
2020-11-08 18:48:10
8635
1
原创 C++ 字符、字符串与int数据互转
1.char转int将字符a转换成int型数据赋值给bchar a='5';int b=a-'0';2.int转char将整型a转换成char型赋值给bint a=5;char b=a+'0';3.string转intstoi()头文件:#includestring a="100";int b=to_string(a);4.int转stringto_string头文件:#includeint a=100;string b=to_string(a);
2020-11-01 22:35:23
476
原创 [c++]查找二叉树根节点到任意结点的路径
今天在做leetcode236时受到启发,怎么求二叉树根节点到二叉树任意结点(该节点在二叉树中存在)的路径?当然,前提是二叉树各节点的值不相等。示例输入:root = [3,5,1,6,2,0,8,null,null,7,4] ,target=4输出:{3,5,2,4}思路一:我们可以用哈希表存储所有节点的父节点,根节点的父节点设为nullptr;然后我们就利用节点的父节点信息从target节点开始不断往查找,并将当前结点的值存储到ans中,直到查找到nullptr。ans最终存储的是target
2020-10-22 22:12:45
2441
原创 [C++]leetcode题解之二叉搜索树的最近公共祖先
问题描述:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例:思路:题目中给出的是一棵「二叉搜索树」,因此我们可以快速地找出树中的某个节点以及从根节点到该节点的路径,例如我们需要找到节点 p:我们从根节点开始遍历;如果当前节点就是 p,那么成功地找到了节点;如果当前节点的值大于 p 的值,说明 p 应该在当前
2020-10-22 21:47:59
298
原创 [C++]leetcode题解之二叉树的中序遍历
记录每天leetcode刷题时间:2020年10月19日leetcode94问题描述:给定一个二叉树,返回它的中序 遍历。示例:了解:二叉树的中序遍历的访问顺序为先访问左孩子结点,再访问根节点,最后访问右孩子结点。方法:(1)递归递归的思路很简单。void inOrder(TreeNode *root,vector<int>&ans){ if(root== nullptr) return; inOrder(root->left.
2020-10-19 19:53:24
162
原创 [C++]leetcode题解之二叉树的后序遍历
时间:2020年10月18日leetcode145示例:了解:二叉树的后序遍历的访问顺序为先访问左孩子结点,再访问右孩子结点,最后访问根节点。方法:(1)递归void PostOrder(TreeNode *root,vector<int>&ans){ if(root== nullptr) return; PostOrder(root->left,ans); //先访问左孩子结点 PostOrder(root->righ
2020-10-18 21:49:21
179
原创 [C++]leetcode617题解之谁能教我学递归!!!
时间:2020年10月17日leetcode617问题描述:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例:思路:根据前序遍历的思想,递归遍历两棵树,生成新的二叉树。方法: TreeNode *mergeTrees(TreeNode *t1, TreeNode *t2) { if
2020-10-17 21:28:13
132
原创 [C++]leetcode102题解之二叉树的层次遍历
时间:2020年10月16日leetcode102问题描述:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:思路:广度优先搜索。广度优先搜索框架:int BFS(){ 定义队列; 定义备忘录,避免走回头路 //如果是二叉树,则不用定义备忘录;需要根据具体情况分析 边界判断。 将起始位置加入到队列中,同时更新备忘录。 while (队列不为空) { 获取当前队
2020-10-16 21:02:16
160
原创 [C++]leetcode572题解之另一个树的子树
时间:2020年10月15日leetcode572问题描述:给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例:思路:首先递归求出s的子树,然后再将s的子树分别与二叉树t比较。如果存在子树与t相等,则返回true。方法:递归//判断两棵树是否相等 bool isEqualTree(TreeNode *s,TreeNode *t){ if(s==nul
2020-10-15 20:44:55
176
原创 [C++]leetcode144题解之二叉树的前序遍历
时间:2020年10月14日问题描述:给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,null,2,3]1\2/3输出: [1,2,3]了解:二叉树的前序遍历也称为先序遍历,其访问顺序为先访问根节点,然后再访问根节点的左孩子结点,最后在访问根节点的右孩子结点。方法:(1)递归void preOrder(TreeNode *root, vector<int> &ans) { if (root == nullptr) return;
2020-10-14 20:54:29
197
2
原创 [C++]leetcode234回文链表
今天受实验室同学的启发,决定以后记录每天自己的leetcode的刷天记录,另外希望自己在做题时时能够深入思考,争取做到每做一题都能够有所收获。问题描述:请判断一个链表是否为回文链表。示例:输入: 1->2输出: false输入: 1->2->2->1输出: true进阶:你能否使用O(n)的时间复杂度和O(1)空间复杂度思路:首先利用快慢指针找到链表的中间结点,然后再将链表从中间节点分割生成两个链表,最后比较两个链表是否相等//找到链表的中间结点,并从中间结点将链
2020-10-13 17:07:39
180
原创 C++二维vector容器按照指定列排序
1.编写compare函数static bool compare(vector<int>&a,vector<int>&b){ return a[1]<b[1]; //a[num]<b[num],num代表指定列 // < 代表升序排列}2.与sort函数结合sort(intervals.begin(),intervals.end(),compare);//intervals为二维vector容器3.例子
2020-09-21 20:42:38
2224
原创 华为交换机设置端口镜像捕获数据包
华为交换机设置端口镜像捕获数据包1.登录交换机在MobaXterm中选择telnet会话,采用telnet协议登录交换机。2.添加镜像组输入sys命令进入编辑模式。添加镜像组,2为镜像组的标号 mirroring-group 2 local3.添加监听端口注:抓包的时候,需要将电脑网卡端口与该监听端口用网线连起来。进入需要监听的端口(命令中的9即为要设置的监听端口)interface GigabitEthernet1/0/9设置监听mirroring-group 2 monito
2020-09-17 17:40:45
6404
2
原创 Centos7更换指定版本内核并搭建内核开发环境
一、更换指定内核版本1.由于项目需求,需要更改内核版本并搭建内核开发环境。当前内核版本指定内核版本:3.10.0-327.el7.x86_642.下载指定内核rpm安装包下载地址:http://vault.centos.org/7.2.1511/os/x86_64/Packages/kernel-3.10.0-327.el7.x86_64.rpm也可以在该网站http://vault.centos.org获取其他版本的安装包。3.安装rpm -ivh kernel-3.10.0-327
2020-08-20 19:10:36
3040
原创 创建内核函数的man手册
最近在进行linux内核开发的学习,但是不知道怎么使用内核函数。在朋友的提醒下,可以通过man命令查询函数的使用,但是系统并没有自带内核函数的man手册,所以就尝试手动添加。踩过的坑1.必须下载与自身系统内核版本相同的内核源码2.建议直接在虚拟机内下载内核源码。我一开始是在宿主机上下载的内核源码,然后拖进虚拟机内,但是文件在拖进迅疾的过程中会出现数据丢失的情况(可能是我电脑的原因)。最后在解压内核源码的时候就没有成功。3.在生成mandocs之后,直接在当前目录运行make installmando
2020-05-16 15:30:46
419
原创 centos7无网络环境下安装docker
1.下载docker的rpm安装包需要的安装包docker-ce-19.03.8-3.el7.x86_64.rpmdocker-ce-cli-19.03.8-3.el7.x86_64.rpmcontainerd.io-1.2.13-3.1.el7.x86_64.rpmrpm安装包已存入百度云,需要的自取。百度云链接:https://pan.baidu.com/s/1ZD1_1vVYA...
2020-04-29 16:36:20
945
原创 linux内核编程环境搭建并编写helloworld模块
一、linux内核编程环境搭建升级kernel1.yum update kernel记住更新的内核版本,重启虚拟机,选择刚刚更新的内核版本进入。查看当前内核版本uname -r安装kernel-develyum install “kernel-devel-uname-r == $(uname -r)”安装完成之后便可以尝试编写helloworld内核模块。但是,在这一步可能会...
2020-04-28 21:47:33
805
原创 Docker限制容器的Block IO
Block IO指的是磁盘的读写,docker可以通过设置权重以及限制bps和iops的方式控制容器读写磁盘的带宽。通过命令docker help run | grep -E ‘bps|IO’可以查询block IO的选项参数。主要参数有:–blkio-weight:容器默认磁盘IO的加权值,有效值范围为10-1000。–blkio-weight-device: 针对特定设备的I...
2020-04-24 19:19:37
4439
1
原创 虚拟机(centos7)设置静态ip
我虚拟机选的桥接模式,在打开虚拟机之前对vmware进行设置。一、vmware设置点击vmware编辑,选择虚拟网络编辑器,如下图,之后选择更改设置。选择桥接模式,网卡选择含有wireless的网卡,如下图所示。点击确定,之后打开虚拟机。二、虚拟机设置1、查看本地主机ip,默认网关以及DNS在命令行窗口输入ipconfig /all,获取主机网络信息。2、点击centos右上...
2020-04-22 22:04:17
150
原创 Docker私有仓库
一、centos7创建私有仓库1.拉取私有仓库镜像docker pull registry2.启动私有仓库启动私有仓库并端口映射docker run -id --name=registry -p 5000:5000 registry3.查看私有仓库是否搭建成功打开浏览器,输入地址http://192.168.0.101:5000/v2/_catalog,其中192.16...
2020-04-22 18:05:55
240
转载 利用Dockerfile构建一个提供ssh功能的镜像
https://www.cnblogs.com/whutxldwhj/p/6427530.html
2020-04-22 16:08:29
143
原创 利用docker commit构建一个提供ssh功能的镜像详细教程
环境:虚拟机:centos7(ip:192.168.0.101)(1)docker安装centos镜像docker pull centos(2)运行centos镜像docker run -it --name=“myCentos” centos /bin/bash(3)进入docker centos容器安装openssh-serveryum -y updateyum -y i...
2020-04-22 14:38:24
492
原创 centos7安装docker详细教程
1.确定虚拟机是centos7及以上版本cat /etc/redhat-release2.yum安装gcc相关yum -y install gccyum -y install gcc-c++3.卸载旧版本如果虚拟机从来没有安装过docker可以略过此步(注意该步骤为一条命令)yum remove docker \docker-client \docker-client-l...
2020-04-17 21:35:01
207
1
原创 C++判断文件是否为空
在文件中读取一个字符,判断是否为文件末尾。ifstream ifs(filename,ios::in)char ch;ifs>>ch;if(ifs.eof()){ cout<<”文件为空”<<endl;}需要引用头文件fstream...
2020-03-22 15:17:53
8733
9
原创 解决clion控制台中文乱码
在clion代码文件的编码是UTF-8格式,而控制台在显示UTF-8格式的中文时会出现乱码,所以需要修改代码文件的编码格式,具体操作如下。点击clion窗口右下角编码格式,将utf-8改为GBK在弹出的窗口中选择convert重新运行代码即可正确显示中文。...
2020-03-19 11:08:34
7047
原创 laravel使用middleware中间件做路由保护
概述 在laravel中默认定义了auth中间件,auth中间件可以实现禁止未登录用户访问后台页面。用户也可以根据自己的需求来自定义中间件。本文将会对auth中间件的使用和中间件的自定义进行阐述。一、auth中间件的使用1. 在路由文件中引用auth中间件 打开路由文件web.php,中间件的使用方法为路由->middleware(中间件名称)。Route::get('inde...
2020-02-14 19:03:25
2528
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人