自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 nvm的安装与使用

最近在研究用nodejs做前端开发,因此涉及到了一个nodejs的版本管理工具nvm的使用,折腾了半天决定用博客记录下来。首先nvm的全称是nodejs version management——俗称nodejs版本管理,用它可以实现不同版本的nodejs切换,用以测试兼容性问题。安装nvm第一步就是下载nvm安装,可以去nvm的官网下载,下载文件名为 nvm-setup.zip 的链接。 但是,GitHub的服务器在国内非常少,因此下载非常缓慢,甚至页面都加载不出来。可以去百度网盘下载【提取码:ms

2021-03-18 22:59:31 541

原创 VS code上如何实现一键生成代码片段

最近被老板关(压)照(榨),要求开始写前端项目。从来没碰过前端,也只能扛起键盘敲码了。突然发现VS CODE对于编写前端代码也是个非常好用的东西,但是每次新建一个vue界面就要敲一通的<template> <div id=""> </div></template><style><style><script>export default { data(){ return{

2021-02-21 14:39:54 1416

原创 解决虚拟机上的系统无法接入互联网的问题

最近不知道干了什么,突然发现VMWare的虚拟机无法接入网络,连百度都上不了了,而且ping百度也不通。气的差点重装系统,折腾了一天之后,终于找到解决办法了。话不多说,先贴出解决方案:只需要把windows中网络设置模块关于虚拟机上的虚拟机桥接协议勾上即可:如下图如果虚拟机用的是桥接模式,则只需要把VMNet1的勾上即可如果用的是NAT模式,则只需把VMNet8勾上即可同时也要确保,电脑上连接的网络也是勾上的,不论是WiFi连接还是网线连接,如下图(我这里是无线网连接的)接下来只需要

2020-09-06 23:46:31 627

原创 STL浅谈(一)——vector

在C++中,STL (Standard Template Library)是必学,也是非常重要的一块内容。STL为特定场景的数据保存提供了极大的方便。同时STL也是面试官必问的问题之一。STL有着高可重用性,高性能,高移植平台和跨平台的优点。这篇博客叫STL浅谈,因为STL涉及到的内容太多了,这里只能随便介绍介绍。STL的构成STL主要由六大块构成:容器:用于存储数据的工具,例如:vector,list,deque, set,map等算法:实现了按照用户的要求对容器中数据进行特定的操作,例如s

2020-09-06 22:03:02 230

原创 Ubuntu下将python程序打包成可执行文件

pyinstaller是一个python代码的打包神器,它可以将python源代码打包成一个可执行文件,从而做到对外暴露可用功能并隐藏具体实现的功能。这篇博客主要想说一下在ubuntu下如何使用pyinstaller打包。首先需要安装打包工具,但是一般情况下...

2020-08-07 15:31:20 6750 6

原创 ubuntu 20.04下编译供C++/python使用的opencv

最近想在linux环境下使用opencv作图像处理工作。之前写过一篇Windows下visual studio 2019下配置opencv4.3.0。今天来试试在Linux ubuntu 20.04的系统下编译opencv。首先opencv官网中并没有linux下的编译好的包,因此需要下载源码进行编译。下载源码:源码地址在opencv官网中可以找到,我这里用的是最新版的4.4.0. 官网地址:https://opencv.org/,具体操作如下两张图:源码下载至一个指定文件夹,以/home/op

2020-07-27 17:25:30 2128 4

原创 手把手教你用C++写贪吃蛇

最近女朋友挺无聊的(不是左手也不是右手),决定找个小游戏让她玩玩,想来想去就是贪吃蛇比较经典,但是老版的诺基亚挺难找的,于是决定用C++写一个贪吃蛇来哄哄女朋友,也顺便更新一下博客。由于代码分多个文件写成,因此不太好在博客中贴出源代码,源代码已上传至GitHub(麻烦各位爸爸们看代码时顺手给个star!),下面说一下思路:如果想写出贪吃蛇的游戏首先得知道贪吃蛇的玩法,简而言之就是一条蛇在转悠,越转越长,同时要吃东西。这么说各位看官肯定都明白了吧?我相信各位的回答一定是下面这样的:对于贪吃蛇游戏来说,

2020-07-24 22:11:52 5133 10

原创 C++实现经典排序算法(二)——选择排序和快速排序

俗话说得好:排序千万种,方便第一种,排序不规范,找bug两行泪。上次写了一篇关于插入排序和冒泡排序的博文,这次再来介绍一下选择排序法和快速排序法。选择排序法,顾名思义就是将需要的数选择出来,再放到需要的地方。...

2020-07-15 14:55:17 430

原创 visual studio下错误LNK2019:无法解析的外部符号public:xxx _thiscall的可能原因之一

最近在写C++程序的时候碰到了一个连接错误,为了解决这个bug花了很长很长时间,因此写下这篇博客记录一下。首先上个错误情况:这是一个连接错误,准确的来说就是连接器无法在库中或其他声明文件找到你在使用中的相关定义函数或类或变量,详细说明可以看下微软的官方声明。我的初衷是想自己实现一个Stack类——MyStack,考虑到stack是允许...

2020-06-19 15:16:51 1924

原创 什么是时间复杂度?什么是空间复杂度?

在对一个算法的好坏的评估中,最常用到的就是时间复杂度和空间复杂度。那么问题来了,什么叫做时间复杂度,什么叫做空间复杂度呢?

2020-06-12 16:58:27 980

原创 C++实现经典排序算法(一)——插入排序和冒泡排序

排序算法应该是程序员面试的时候必然会被问到的问题之一。总结起来就下面几个问题:你知道哪些排序算法?具体介绍一下xx排序算法的实现原理xx排序算法的时间复杂度和空间复杂度分别是多少?xx排序算法是稳定的嘛?面对以上几个问题,首先你得知道什么是排序,什么是时间/空间复杂度以及什么叫做稳定排序。首先,排序问题很好理解,就是将无序的一组数据变成有序的(可以是升序也可以是降序)。举个例子,< 3, 2, 5, 4, 7, 9, 0, 1>这一组数据经过你的代码处理后变成了<0, 1,

2020-06-09 13:01:31 352

原创 C++回溯算法与八皇后问题

今天想写一篇有关回溯法的问题,但是不知道开头应该介绍些什么东西。所以简单粗暴一点,直接上问题。一种经典的回溯算法就是八皇后问题,何为八皇后问题呢?八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。 ——引自维基百科为了更好的理解,上一张图:图中画×的是满足条件的,画〇则不满足,因为有两个在同一条直线上。那么问题来了

2020-06-07 18:21:31 1631 4

原创 C++与openCV绘制Julia集合

最近被几(公)张(司)图(任)片(务)给美(吓)哭了,于是决定来研究研究茱莉亚(Julia)集合。Julia集合本质上是对级数的敛散性的描述,仅仅只说数字,想必大家早都看睡着了,因此当敛散性和计算机图像二者结合到一块儿的时候就非常非常美了。话不多说,先上几张图:想要问问你美不美~,这些图片都是靠openCV实现的,那么接下来就来分析分析如何画出这么美丽的图片。首先,你得了解基本的数学知识——敛散性。敛散性分为收敛和发散。收敛指的是一个级数最后的求和结果趋于一个常数,发散是指一个级数最后的求和结果趋

2020-06-05 18:05:54 779

原创 windows10在visual studio2019下配置使用openCV4.3.0

openCV是基于C++开发的一个强大的图像处理库。在用C++处理图像或视频时通常会使用到openCV这个库,但是这个库并非C++中的标准库,因此在使用之前需要先下载,并加载配置到我们的项目中。那么怎么配置呢?首先你得有以下的所有工具。windows10系统。可以通过镜像安装,也可以通过CD或U盘安装。Visual Studio2019,基于实(省)用(钱),我使用的是community免费版,点击此处可以下载并安装.点击下面下载中的community2019然后安装即可,具体步骤可参考其他

2020-06-01 17:53:38 1044 3

原创 用C++解决约瑟夫环的问题

犹太历史学家弗拉维奥·约瑟夫在他的日记中提到过这么一个问题:他和他的40个战友被罗马军队包围在洞中。它们讨论是自杀还是投降,最终决定采用抽签的方式决定自杀的顺序。算法是这样的:所有人站成一圈,依次报数从1到3,每报到3的则自杀,下一个再从1开始报数。这样,所有人会依次自杀,直到最后一个。那最后一个死不死又有谁知道呢?那么站的位置就显得很重要了,到底站在哪个位置才能最后一个死呢?这便衍生成了一个计算...

2020-03-18 21:46:33 2208

原创 C++中的类模板和函数模板

C++编程的时候我们通常会遇到这么一种情况就是,有时候我们需要一个数组或类来存储一组数据,但数据类型我们却无法确定,有时候可能时整型数,有可能是浮点数,也有可能是字符串。对于这种只有在程序具体运行的时候才能知道需要存储数据的类型的情况下,我们能做的就只有对每一种可能产生的类型都申请一个固定的内存,一旦需要便可以使用。但这样就造成了一个问题,如果可能产生的数据类型很多,但实际上用到的类型很少,就会产...

2020-02-26 20:13:28 441

原创 C++的移动语义

在C++中对于一个对象的复制有多种方法,其中常用的有拷贝构造函数或者采用重构赋值法。拷贝构造函数(copy constructor):#include<iostream>using namespace std;class Complex{ int real; int imag;public: Complex(int r, int i): real(...

2020-02-18 07:28:55 947

原创 C++如何重构操作符

C++和C一样有很多的操作符,如表示逻辑运算的&,|,~,!以及表示数字运算的+,-,*,/,++,–和表示判断的==,&&,||等等。但是在C中这些符号只能用于处理特定类型的数据。但是在C++中可以对部分的操作符重载,已达到操作自定义的类型的数据。C++中可以重载的操作符有:用途符号算术运算+,-,*,/自增自减++,–比较==,!...

2019-09-10 01:54:25 3187

原创 C++中的静态类元素

在C/C++关键词“static”可以用来定义一个函数中的变量为静态变量,这样导致函数销亡时被static修饰过的变量值并不会随之销亡,当第二次调用时该变量值仍会在原来的基础上再做修改,例如以下程序:#include <iostream>using namespace std;int TestFunctionA(){ int a = 0; a++; ...

2019-09-05 21:21:03 694

原创 codeblocks安装opencv

opencv是一个强大的计算机视觉处理工具,全称为open source computer view。用C++也可以使用opencv处理图片,接下来的这篇文章主要就讲一讲如何使用codeblocks安装并执行C++写的通过opencv处理图片的代码。首先需要安装codeblocks,可以参考文章:https://blog.csdn.net/WJ_SHI/article/details/8141...

2019-09-05 17:46:52 2875 1

原创 C++异常处理机制

有的程序在编译时看起来是没有报错或异常,但是往往有些程序在运行时会出现意想不到的错误。这样有可能会产生意想不到的效果,例如在某个定时任务中(每10分钟运行一次),需要处理一批Excel表中的数据。处理完毕后将关闭该Excel表格。一旦在需要处理的Excel表格中的数据格式不符合程序的格式,程序会报错从而终止运行。经过24 h 后,将会有成百上千的Excel在后台被打开,这样服务器的后台会大量被打开...

2019-05-03 05:45:16 227

原创 C++中的抽象函数与抽象类

抽象函数指的是没有具体内容的函数,一般用"= 0"修饰,例如:class A{ public: virtual void func() = 0;};上面的虚函数func即为一个抽象函数。所谓的抽象类即指含有至少一个抽象函数的类。抽象类不能被实例化,抽象函数一旦被实例化,则会产生报错 “can not declare variable xx to be abstract type xx...

2019-03-31 21:55:17 6830 1

原创 C++中的后期绑定——多态

在C++中除了继承,还有一个重要的性质就是多态性,也叫后期绑定。例如在一个画图形的例子中:这里写代码片

2019-03-25 00:12:39 518

原创 C++中继承时的初始化列表和函数重载(overload)

在C++中的一个重要内容就是可继承性,继承后的子类拥有父类中的所有方法和属性,因此子类在继承后就可以对父类中的属性初始化。在类中可通过构造函数,对一个类中的属性采用列表的方式进行初始化,例如用一个程序来管理学生的基本信息:#include &lt;iostream&gt;#include &lt;string&gt;#include &lt;sstream&gt;using names...

2018-09-03 14:26:28 5529 6

原创 C++中的可继承性

与C语言另一个不同点就是C++具有可继承性,这也是C++的一大优势。继承关系主要存在于类与类之间,继承的类称之为子类(派生类),被继承的类称之为父类(基类)。继承关系中,子类无条件拥有父类中的所有属性和方法。继承的写法用“:”表示,一般地,继承方式为public形式,具体地写法如下面的例子:#include &lt;iostream&gt;using namespace std;cl...

2018-08-31 11:50:39 518

原创 C++中的名空间

在写C++程序时一般都会有一句using namespace std;这里的std其实就是引入了一个名空间,其中cout和string函数就包含在此名空间中,如果在写程序时没使用std名空间,但又使用了cout、string等函数,那么将会出现以下错误: 名空间的引用方法最常见的就是通过关键语句using namespace加要引入的名空间,名空间也是一个类,也拥有其他的引入方法,例如下面通...

2018-08-30 18:36:40 207

原创 拷贝构造函数(copy constructor)

拷贝构造函数是指将已存在的该类的一个对象通过引用作为构造函数的参数进行传递,从而达到构造函数的目的。一般地存在拷贝构造函数的同时也会有其他的构造函数存在,例如:#include &lt;iostream&gt;#include &lt;string&gt;#include &lt;sstream&gt;using namespace std;struct Complex{ ...

2018-08-30 16:27:17 3795

原创 C++中的this指针

关键词this是一个指针,这个指针是指向自己的一个指针,也即this是向某些需要使用到本身地址的地方传递对象本身的地址。this只能在类中的方法使用,不能出现在main或其他函数中。例如下面的程序:#include &lt;iostream&gt;using namespace std;class A{public: A(){} ~A(){} void ad...

2018-08-28 16:06:49 352

原创 C++中的析构函数(destructor)

和构造函数相似,析构函数也是一个特殊的类方法,它是用来自动释放对象的。析构函数的表示形式为:在类名前面加上“~”即表示析构函数。与构造函数不同的是,一个类中只允许一个析构函数存在。 如果类中无析构函数,则编译系统会默认补上一个空的析构函数。当程序结束时,会自动调用析构函数。例如下面的程序:#include &lt;iostream&gt;using namespac std;clas...

2018-08-28 14:25:36 4842

原创 C++中的构造函数(constructor)用法

构造函数(constructor)是一个特殊的类方法,它是在初始化对象时调用的类中的方法。有以下几个关键点: 构造函数调用时可以对类中的属性赋值以及输出相应的提示语句构造函数无返回类型和返回值一个类可以拥有多个构造函数 例如下面的程序:#include &lt;iostream&gt;using namespace std;class Complex{ doubl...

2018-08-26 21:35:54 7110

原创 C++中的容器

在C++中有基本类型,如int,char等之类的类型,只能存储一个数字或字符。在C++中还提供了一种容器机制,用来存储多个相同的变量类型,如string就是一个字符容器,可以存放多个字符变量。除此之外,C++中的容器还有: - 列表:list - 数据段:vector - 栈:stack - 队列:queue - 聚合数据段:map 这...

2018-08-26 12:10:47 2598 2

原创 C++中的函数库

和C语言一样,在C++中也有各种各样的函数库,例如在C++程序中的第一行一般都会写成 #include &lt;iostream&gt;这便是包含C++中的标准库函数,在C++中,还提供了有关字符串操作的库函数,string,例如:#include &lt;iostream&gt; //默认库函数#include &lt;string&gt; //包含有关字符串操作的库函数...

2018-08-24 18:20:14 1035

原创 C++中的函数重载

在C++中允许对全局函数或者类中的方法重载,多个全局函数或类中的方法允许拥有相同的名字,前提是能被编译器正确识别:全局函数如果需要重载,那么则要求函数中的参数不同,例如:void f() 和 void f(int x)是允许同时出现的,虽然名字相同,但其中的传递参数不同。但是如果相同的函数名中的参数类型相同,但其中一个被const修饰,是不允许的,例如:void f(int x)和void ...

2018-08-23 10:30:16 703

原创 变量的存活周期与static修饰的变量

在C语言或者C++经常需要定义许多的变量,既然定义了一个变量,那么该变量就肯定有一个作用范围(存活周期)。在C语言或C++中允许在不同的作用范围中拥有相同名字的变量。变量按照作用范围一般分为全局变量和局部变量。在函数内定义的一般为局部变量,在函数外定义的一般为全局变量。被“{}”圈住的变量则只在其中起作用,例如以下程序:#include &lt;iostream&gt;using nam...

2018-08-19 17:18:54 312

原创 类中的属性和方法被const修饰

在C语言和C++中有一个很特殊的关键词——const,这个关键词表示常量的意思,一旦被该关键词修饰后,则该变量变成了一个常量,const可以修饰变量,也可以修饰指针,也可以修饰引用,同样地,const也可以用来修饰类或结构体中的属性或方法。const的好处之一就是防止后续程序中修改不允许变动的值,以避免产生bug。如下面的程序,就是一个典型的方法可以改变对象中的属性:#include &lt;...

2018-08-18 16:43:28 978 1

原创 C++中的头文件(.h)和源文件(.cpp)(一)

在C语言中,第一行要写的代码基本上都是#include&amp;lt;stdio.h&amp;gt;这其实是一个头文件的声明,意思是在主文件(main.c)中需要调用在这个头文件中声明的函数,如printf,scanf……同样地,在C++中也需要对头文件进行声明,常见的如:#include&amp;lt;iostream&amp;gt;#include&amp;lt;string&amp;gt;#include&amp;lt;iom

2018-08-18 10:51:47 9716

原创 C++中的封装——类class

在C语言中可以使用struct(结构体)将相应的数据封装起来,统一使用,同样地在C++中也可以使用struct将相应的属性及方法封装起来,例如下面的程序:#include &lt;iostream&gt;using namespace std;struct S{ int e1, e2;};void f(const S&amp; s){ //以引用的方式传递地址 ...

2018-08-17 19:54:15 8972 1

原创 C++的封装性

相比于C语言,C++中提供了一种非常实用并且也非常常用的方法——封装,封装是指将某些具有相同属性或性质的变量等归纳在同一处,已达到使用和构造方便。C语言中也提供了一个类似于封装的关键词——struct,但该关键词只限于将变量封装,例如下面的例子:写一个程序计算出两个复数相乘。若果没有封装性:#include &amp;lt;iostream&amp;gt;using namespace std;int...

2018-08-15 13:13:32 4505

原创 C++中的const关键词用法

在C语言和C++中,有一个用来修饰所有变量的关键词const,表示将此变量变成常量的意思。比如,对int型变量加上一个const,那么该变量就是一个常量了,也即该变量无法再发生改变了。例如下面的代码片段:cont int i = 5;i = 8; //此处会产生编译错误,因为i被const修饰,因此i的值不能再改变同样地,const除了可以修饰基本类型数据外,还可以用来修饰指针和引用...

2018-08-14 16:59:27 272

原创 C++中的开辟/释放动态空间new/delete

在C语言中用于开辟/释放动态空间的关键词是malloc/free,该种开辟空间的方法在C++中,也适用,但除此之外C++还提供了另外一种开辟/释放动态空间的关键词new/delete。对于用malloc开辟空间,则需要使用关键词siziof计算所需开辟空间的大小。malloc和free在C++中并不经常使用,因此此处不过多介绍。接下来重点说一下new和delete的用法。new用来在堆中开辟...

2018-08-13 16:22:59 6822

空空如也

空空如也

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

TA关注的人

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