自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 收藏
  • 关注

原创 UCI配置文件介绍及配置

uciOpenWrt的模型统一配置接口配置文件uci的配置文件中通常包含一个或多个配置节,所谓配置节是带有一个或多个选项的语句。所有的配置文件UCI配置文件均保留在/etc/config中。/etc/config中的文件含义:dhcp (Dnsmasq软件包配置,包含DHCP和DNS设置)dropbear (SSH服务器选项) timeserver (rdate的时间服务列表) luci(基本的LuCI配置) wireless(无线设置和WIFI网络定义) uhttpd(Web服务器选项配置)u

2022-02-15 21:51:05 5062

原创 使用DNS来屏蔽广告

  可以利用hosts文件把广告的网站的域名映射到本机IP或非法目的IP,这样就不会看到广告图片了,也不会浪费网络流量。  例如 127.0.0.1 a.com,这样计算机解析a.com域名时,就解析到错误的IP,达到了屏蔽广告网站的目的。  windows上 C:\Window\System32\Drivers\etc\hosts  linux上, /etc/hosts...

2021-07-16 20:04:17 3914

原创 Ubuntu下使用git获取代码仓库,在已经拥有仓库访问权限且仓库存在的情况下提示The authenticity of host ‘***‘can‘t be established.

git clone失败解决方法:修改/etc/ssh/ssh_config文件的配置,在文件中添加两行代码即可StrictHostKeyChecking noUserKnownHostsFile /dev/null重新使用git clone 即可成功克隆代码

2021-07-14 15:31:04 431

原创 解决Mac终端上使用python3导入pandas问题

MAC终端使用python3  mac 上自带python,可以在终端上使用which python命令查看python所在位置是/usr/bin/python,但是自带的python的版本是python2,可以使用python --version来查看自己mac电脑上的python版本。如果我们需要使用python3,可以自己去官网上下载,下载成功后,which python3命令可以查看python3所在目录,我自己的python3是在/Library/Frameworks/Python.frame

2021-03-16 15:32:19 1644 2

原创 mac电脑修改终端上vim配置

  在mac终端上使用vi或者vim来写代码时,vim本身的配置十分不方便,我们可以通过修改vim的配置文件vimrc文件,该文件的位置在/usr/share/vim,切换到该目录下,vim vimrc修改该文件,但此时会发现该文件是只读文件,不能修改,可以用chmod命令(chmod +w vimrc)来修改该文件的权限,使其可写,修改成功,即可直接更改vimrc文件;若提示没有权限执行该命令,那么可以换一种方法:  执行 如下命令:cp /usr/share/vim/vimrc ~/.vimrc

2021-03-07 16:04:59 1465

原创 mac电脑上编译出错fatal error: ‘sys/epoll.h‘ file not found

  代码中使用epoll时,都需要添加sys/epoll.h这样的头文件,但是epoll是linux独有的,Mac电脑上并没有sys/epoll.h头文件,因此编译出错。但mac上使用kqueue代替了epoll,具体用法如下:https://zhuanlan.zhihu.com/p/21375144...

2021-03-07 10:18:10 4528

原创 iOS开发基础控件 object-c

文本控件UIlabel使用:UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(20,100,280,100)];label.text=@"Hello World2,Hello World2,Hello World2,Hello World2,Hello World2"; label.font=[UIFont systemFontOfSize:18];//设置字体和字号按钮控件UIButtonUIButton *button1=[UI

2020-12-03 09:34:52 273

原创 内存泄漏检测方法(Linux、VS2017)

VS2017下内存泄漏检测方法  在代码最前面加上#define CRTDBG_MAP_ALLOC,在main函数最后返回之前使用_CrtDumpMemoryLeaks(); 并包含crtdbg.h文件#define CRTDBG_MAP_ALLOC#include<iostream>#include<crtdbg.h>using namespace std;int main(){ int *a = new int[10]; int *p = new int[1

2020-10-26 16:29:12 466

原创 剑指offer45 :把数组排成最小的数 C语言

  输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出来的所有数字中最小的一个。例如,输入数组{3,32,321},则打印出来能排列的最小数字是321323.思路1:最直观的方法就是求出这个数组中所有的排列方式,然后依次比较找到最小的那个。但n个数字总共有n!个排列,效率比较低。思路2:对数组进行重排。找到一个排序规则,每次用两个数进行比较,有两种方法,第一个数在前或第一个数在后,如果第一种情况的排法大于第二种,则进行交换。顺序打印最终数组的元素,即为最小。但要考虑0不能放在第一个位置

2020-09-16 11:25:36 996

原创 C++ 单例模式 懒汉模式(延时加载)

  所谓单例模式就是让一个类只能实例化一个对象。简单的单例模式如下:class Singleton{public: static Singleton* getInstance() { if (NULL == object)//懒加载 { object = new Singleton(); } return object; }private: Singleton() {} Singleton(const S

2020-09-06 11:03:34 695

原创 力扣--91解码方法 c++ 动态规划实现

解码方法一条包含字母A-Z的消息通过以下方式进行了编码:‘A’ -> 1‘B’ -> 2‘C’ -> 3…‘Z’ -> 26给定一个只包含数字的非空字符串。请计算解码方法的总数。示例1:输入:“12”输出:2解释:它可以解码为"AB"(1 2) 或者 “L”(12)。示例2:输入:“226”输出:3解释:它可以解码为"BZ" (2 26),“VF” (22 6),或者 “BBF”(2 2 6)。思想:dp[i]为译码方法总数;s[0]

2020-09-04 13:24:34 193

原创 合并两个有序链表 c语言 递归与非递归

将两个升序链表合并成一个升序链表,新链表是给定两个链表的节点组成的递归struct ListNode { int val; struct ListNode *next;};struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ if(NULL==l1) return l2; if(NULL==l2) return l1; if(l1->val<=l2-

2020-08-15 21:36:16 569 1

原创 c语言判断二叉树是否镜像对称 递归

力扣题----判断二叉树是否为镜像对称的。思路:p指向root的左孩子,q指向root的右孩子。判断p和q的值是否相等,相等则递归判断p的左孩子和q的右孩子是否相等,p的右孩子和q的左孩子是否相等,相等则继续递归下去。当p和q都为空时,说明整个二叉树都已经遍历完毕且遍历过程中p和q的值一直相等,则返回true。给定二叉树的结构如下:struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right;

2020-08-14 19:10:39 1073

原创 c语言判断是否为回文数

 $emsp;给定一个数,它的逆序输出的值等于它本身,则称为回文数,例如:12321、5665、0~9都属于回文数。方法一:逆序输出后与原值比较是否相等,注意用int来保存逆序值可能会超出整形范围bool isPalindrome(int x){ if(x<0) return false; double rx=0; int xx=x; while(x) { rx=rx*10+x%10; x/=10; } re

2020-08-14 18:23:20 6176

原创 MySQL常见的存储引擎的区别总结

  存储引擎就是针对于底层数据文件的存储方式。MySQL数据库是一种插件式存储引擎的数据库。MySQL中可以使用show engines;查看自带的存储引擎。MyISAM  支持全文索引,不支持外键,不支持事务,表锁,B树(B+树)索引(数据和索引是分离开的,非聚集索引,保证了数据可以随机或离散的分布)。InnoDB  不支持全文索引,支持外键,B树(B+树)索引(索引是数据的一部分,聚集索引,数据存储在索引上),行锁,支持事务。MEMORY  数据在内存中存储,一般用于临时表能提升效率,var

2020-08-02 22:58:11 194

原创 c语言股票问题--买股票的最佳时机(一笔交易 或 尽可能多次交易)

  给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。ascdvfgint maxProfit2(int* prices, int pricesSize){ if (NULL == prices || pricesSize <= 1) return 0; //申请一个priceSize行两列的二维数组 int** dp = (

2020-07-25 08:48:44 2073

原创 c语言判断序列是否为BST树的后续遍历序列

bool VerifySquenceOfBST(int* arr, int len)//判断序列是否为BST树的后序遍历序列{ if (NULL == arr || len <= 0) return false; int root = arr[len - 1]; int i = 0; for (i; i < len - 1; ++i)//左子树的节点都小于root ,大于root的为右子树,先break掉 { if (root <

2020-07-23 09:46:14 151

原创 替换字符串中的空格c语言

  实现一个函数,把字符串中的每个空格替换成“%20”.例如:输入“We are happy.”,则输出“We%20are%20happy.”  若从头到尾扫描字符串,每次遇到一个空格替换时,都需要将后面的字符都后移两位,总的时间复杂度为O(n^2).  为减少时间复杂度,可以先遍历一遍计算出总的空格数,则替换空格后的字符串总长度等于原来的长度加上2乘空格数。p2指向替换后的字符串尾部,p1指向原字符串尾部,从后向前遍历。总的时间复杂度为O(n)。...

2020-07-22 21:31:59 1164

原创 旋转数组的最小数字c语言

  把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1.  解:顺序遍历一次数组找最小值是最简单的方法,但效率太低。由于数组是有序的,可以采用二分查找的方式。int InOrderMin(int* arr, int left, int right)//顺序查找{ int res=arr[left]; for (int i = lef

2020-07-18 16:59:26 191

原创 leetcode--分发糖果问题

  老师想给孩子们分发糖果,有N个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:   每个孩子至少分配到1个糖果。   相邻的孩子中,评分高的孩子必须获得更多的糖果。  那么这样下来,老师至少需要准备多少颗糖果呢?代码如下:#include<iostream>#include<vector>using namespace std;int fappen(vector<int> &ve

2020-07-18 16:29:41 377

原创 c++ 智能指针 (auto_ptr、unique_ptr、shared_ptr、weak_ptr)

auto_ptr(不建议使用)  所有权唯一,即只允许一个智能指针指向同一块堆内存。如果有两个智能指针,则回收旧智能指针的所有权。  缺点:指针的赋值或拷贝过程中,回收旧智能指针的所有权,导致旧智能指针无效,若之后给旧智能指针赋值,程序会报错。因此,不建议使用。#include<iostream>template<typename T>class Auto_Ptr{public: Auto_Ptr(T* ptr) :mptr(ptr)

2020-07-10 18:23:30 252

原创 C++ 工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)

  利用工厂模式来生成对象,不需要关注对象的生成过程;还可以简化名称,以便使用。简单工厂模式  同一工厂生产多个产品。  违背开放–封闭规则(开放指新版本设计时可以使用旧版本的代码;封闭指不能修改旧版本的代码)。因此适用于规模固定、不易发生产品改动的工厂。实现如下://简单工厂模式#include<iostream>class Fruit{public: Fruit(std::string nm) :mname(nm) {} virtual

2020-07-06 21:45:55 984

原创 c++ 类的内存布局 菱形继承

菱形继承  菱形继承的方法如下:class A{public: A(int a) :ma(a) {}public: int ma;};class B :public A{public: B(int b) :A(b),mb(b) {}public: int mb;}class C :public A{public: C(int b) :A(b), mc(b) {}public:

2020-07-04 21:53:06 462

原创 c++中的四种转换类型 分类的IP地址

const_cast 去除常性static_cast 转换的安全性高reinterpret_cast 常用于指针的转换dynamic_cast RTTI信息分类的IP地址  最基本的编址方法,一个IP地址在整个互联网范围内是唯一的。

2020-06-27 23:23:29 405

原创 c++继承 基类 派生类 虚函数

继承  类和类的关系有组合、继承和代理。继承的本质就是代码复用。子类继承父类中的一些东西,父类也称为基类,子类也称为派生类。派生类继承了基类除构造函数以外的所有成员。继承的方式  继承方式有public(公有继承)、private(私有继承)和protected(保护继承)。基类中不同访问限定符下(public、protected、private)的成员以不同的继承方式继承,在派生类中的访问限定也不同,具体如下:基类的布局优先于派生类#include<iostream>class

2020-06-15 19:25:39 9574

原创 循环链表来实现约瑟夫环问题 c语言

  已知n个人(以编号1,2,3,…,n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从K开始报数,数到m的那个人又出列;依次规律重复下去,直到圆桌周围的人全部出列。解:本题是约瑟夫环问题的实际场景。可用循环链表来实现。问题的核心步骤为: 建立无头结点的循环链表; 确定第一个报数人的位置; 不断从链表中删除结点,直到链表为空。代码如下:#include<stdio.h>#include<stdlib.h>//不带头结点的循环链

2020-06-10 18:26:47 566

原创 c++ 初识智能指针

智能指针  智能指针是一种自主的内存回收机制,是一种面向对象的指针。我们知道代码中栈上得内存是由系统开辟和释放(函数结束,退栈)的,而堆上得内存是人为开辟、人为释放的。那么我们在程序中new动态申请了一块堆内存,如果忘记释放该内存或是函数异常退出,程序还没来得及执行delete操作,就会造成内存泄露。  学习了c++中的对象后,我们知道对象的生成有两步,即开辟内存和调用构造函数;对象的销毁也有两步,即调用析构函数和释放内存。而调用析构函数是由系统来完成的,因此智能指针要想实现内存由系统回收,可以借助对象

2020-06-08 17:00:46 140 2

原创 c++ String类的写时拷贝

写时拷贝  系统中默认的拷贝构造函数和赋值运算符重载函数是一种浅拷贝,若类中的成员变量有指针类型,那么多个对象拥有共同的资源,在析构时,会对同一块内存多次释放。此时,我们就需要自己来写拷贝构造函数和赋值运算符重载函数实现深拷贝。但是深拷贝也有缺点,即若资源只是简单共享,不进行写操作,则会使资源浪费。  写时拷贝技术就是在写之前为浅拷贝,而写时为深拷贝。那么使用写时拷贝时,对象的销毁(析构函数)要进行合理的处理。由于多个对象可能共享共享同一块内存单元,所以应该在最后一个对象销毁时,才释放资源。这就涉及到了

2020-06-05 11:30:08 769

原创 c++封装一个复数类 实现+ - 输入输出的重载

#include<iostream>class CComplex{ public: CComplex(int real, int image) :mreal(real), mimage(image) {} const CComplex operator+(int val) { return CComplex(mreal+val,mimage); } const CComplex operator+(co

2020-05-28 11:46:28 547

原创 C++ 运算符重载

运算符重载的机制是不能改变原有运算符的逻辑。前置++(++i)的处理逻辑是本身先相加,再返回本身。比如int a=10;++a=20;编译正确,a的值为20.后置++(i++)的处理逻辑是本身先生成一个临时量,先使用临时量(常量),表达式结束,本身再++。int a=10;a++=20;编译错误,报错:error C2106: “=”: 左操作数必须为左值#include<iostream>class CInt{public: CInt(int val)

2020-05-24 17:39:42 135

原创 C++递归函数来实现统计字符串中第一个空字符前面字符长度

C++递归函数来实现统计字符串中第一个空字符前面字符长度例如:char buf[]={'a','b','c','d','e','f','\0','x','y','z'};  当输入字符串buff,N=10或者20,期待输出结果是6;当输入N=3或5时,期待输出结果是3或5。代码实现如下:#include <iostream>int mystrlen(char* buf,int N){ if(buf[0]==0||N==0) return 0;//空字符串出现返回0 e

2020-05-17 21:36:12 302

原创 select、poll和epoll的区别 ET模式

区别select :用途是在一定时间内,监听用户感兴趣的文件描述符上的可读、可写、和异常的事件。在32位系统默认情况下,select最多监听1024个描述符。poll :本质上和select没有太大区别,poll是基于链表来存储的,因此没有最大连接数的限制。select和poll每次调用都需要给内核拷贝描述符和事件;select和poll返回后,每次都需要遍历所有描述符找到就绪的描述符,时间...

2020-05-07 21:29:15 306

原创 C++ 函数模板的使用

函数模板  给出一个简单的例子,实现两个数相加,如下:#include<iostream>template<typename T>T Sum(T a,T b) //Sum为模板名{ return a+b;}int main(){ std::cout<<Sum<int>(10,20)<<std::endl;...

2020-05-06 22:03:51 158

原创 UDP协议--网络编程流程

  UDP是一种无连接的、不可靠的数据报服务。服务器(被动)int socket ();//第二个参数选用SOCK_DGRAMint bind ();//作为服务器,必须将地址信息和sockfd进行绑定int recvfrom (); //接收任意一个客户端的数据int sendto (); //给一个客户端发送数据int close();客户端(主动)int socket ()...

2020-05-04 13:54:48 379

原创 c++ 用类简单封装一个带头结点的单链表

  本篇博客中代码的实现中采用了友元的使用,但一般写代码尽量不适用友元,除非万不得已,具体代码如下:#include<iostream>typedef int ElemType;class LinkList;//为使用友元,做一个声明class Node{public: Node(ElemType val=0) :data(val),next(NULL) { }...

2020-04-29 22:37:40 427

原创 TCP协议--网络编程流程

  TCP 协议是一种面向连接的、可靠的字节流服务。TCP协议的编程流程服务器端socket();//创建一个用于监听客户端连接的网络套接字bind();//将创建的套接字与本段的地址信息进行绑定listen();//启动监听,不会阻塞accept();//接收一个客户端的连接,返回的是一个客户端连接套接字recv(); /send(); //读取数据或发送数据close();//...

2020-04-18 15:26:52 424

原创 linux线程同步的方法——互斥量、信号量、条件变量、读写锁

  线程同步就是当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态。实现线程同步的方法有互斥量、信号量、条件变量和读写锁。互斥量(互斥锁)  基本实现就是在线程进入临界区之前,执行加锁操作;线程退出之后,执行解锁操作。  互斥锁类型:pthread_mutex_t //一般定义在全局...

2020-04-08 22:41:50 263

原创 线程的概念以及线程在Linux上的实现

线程的概念  线程是进程内部的一条执行路径(执行序列或执行流),一个进程可以包含多个线程。将main函数的线程称之为主线程,其他线程称之为函数线程。函数线程的主要构造如下:void *fun(void *arg);int main(){ pthread_create(fun);//只是给定一个函数地址,来指定创建的线程从哪个函数开始执行}线程的实现方式(windows下)用户级线...

2020-04-04 22:03:08 156

原创 c语言快速排序 (递归与非递归实现)

递归1、先在待排序序列中选择一个基准数据,一般常用的就是第一个数据2、i,j : i从前向后 j从后向前 当i < j时,进入循环(1)从后向前找第一个比基准小的数据(i<j),找到后就将其放到i位置(2)从前向后找第一个比基准大的数据(i<j),找到后就将其放到j位置3、将基准的值存储到i位置4、基准将数据序列划分成左右两部分,当左右两部分的数据量大于1时,递...

2020-03-31 22:40:26 3523 4

原创 malloc函数和new关键字 C/C++

malloc free  malloc是c语言中动态开辟内存时常用的函数,malloc只能单纯地开辟内存,使用malloc后,还需要在使用完之后用free释放掉其所开辟的空间。其函数原型如下:void* malloc(size_t size);//void* 指向的是一个半开半闭的区间,即[ ),因此不安全  C和C++中允许任意类型的指针转成void* ,而若想将void* 转成别...

2020-03-24 21:33:17 477

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除