自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 回溯法

回溯法是五大常用算法之一,回溯法也是一种暴力算法。我们在图的深度遍历时,其实就用到了回溯法,先选择一条路走,当出现走不通的情况,再返回上一种重新选择一种走法,直到遍历所有节点。常见的八皇后问题也能够使用回溯法来求解。八皇后问题回溯法解决八皇后问题时,是对每一行的每一个位置进行遍历,确定每一行可放皇后的位置。如果这一行没有可以放皇后的位置,则返回上一行,重新选择一个位置。依次类推。下面介绍八...

2018-09-25 16:26:11 1223

原创 进制转换

各种机制转换函数strtol函数它的功能是将一个任意1-36进制数转化为10进制数,返回long int型。函数为long int strtol(const char *nptr, char **endptr, int base)base是要转化的数的进制,非法字符会赋值给endptr,nptr是要转化的字符#include<iostream>#include&lt...

2018-09-25 16:25:15 211

原创 排序算法

排序算法比较冒泡排序选择排序插入排序希尔排序归并排序堆排序快速排序时间(平均)O(n2)O(n2)O(n2)O(n1.3)O(nlogn)O(nlogn)O(nlogn)时间(最好)O(n)O(n2)O(n)O(n)O(nlogn)O(nlogn)O(nlogn)时间(最差)O(n2)O(n2)O(n2)O(n2)...

2018-09-25 16:24:51 193

原创 容器的使用

Top K Frequent Elements给定一个非空整数数组,返回前K个最频繁的元素输入:nums = [1, 1, 1, 2, 2, 3],k = 2输出:[1, 2]/* 思路:遇到这种top k的题目,一般都使用堆这种数据结构,因为堆排序每次只需要输出顶部,输出k次即可。*/class Solution {public: vector<int> ...

2018-09-25 16:18:44 200

原创 贪心算法

跳跃游戏LeetCode 45给定一个非负矩阵,矩阵中每个位置的数字代表从这个位置最多可以跳的跳数。目标是求出到达最后一个元素的最小跳数。输入:[2, 3, 1, 1, 4]输出:2解释:从0位置跳到1位置,再从1位置跳到4位置,一共两跳到达终点。/* 思路:采用贪心算法,引入reach变量表示可能达到的最远处,这也就是全局最优解;当遍历到i时,局部最优解即次局部下最远可达...

2018-09-25 16:17:32 239 1

原创 其他问题

不使用加号的加法LeetCode 371输入:a=1,b=2输出:3/*思路:不使用加号的加法一般有三步:1)计算a^b,这个计算出来的是不考虑进位的值;2)a&b这个计算出来的是考虑进位的值;3)将考虑进位的值向左移动1位,作为b,将不考虑进位的值作为a,递归调用此函数。*/class Solution {public: int getSum(int a,...

2018-08-21 15:19:01 130

原创 字符串处理问题

大小写转换LeetCode 709 To Lower Case输入一个字符串,输出相同的小写后的字符串举例1:输入:”Hello”输出:”hello”举例2:输入:”here”输出:”here”举例3:输入:”LOVELY”输出:”lovely”/*思路:大小写转换有多种方法,这里介绍两种。1)根据ASCII码值,小写字母的ASCII码值比大写...

2018-08-21 15:18:32 324

原创 动态规划

编辑距离LeetCode 72给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符方法:/*采用动态规划来解决此类问题,定义一个dp矩阵,dp[m+1][n+1],其中m=word1.size(), n=word2.size()。dp[i-...

2018-08-21 15:18:03 246

原创 Top K问题

出现频率Top k的元素LeetCode 347给定一个非空整数数组,返回出现最多的k个元素输入:[1,1,1,2,2,3] k=2输出:[1,2]/*思路:对于此类求top k的问题,都可以用堆排序来实现。map容器和set容器是按照key值来进行排序的,且是按照从小到大排序。而priority_queue是优先级队列,它的底层是大顶堆。因此可以将元素的出现次数放在pai...

2018-08-21 14:34:39 223

原创 面试知识点总结——深浅拷贝

区别在未定义显示拷贝构造函数的情况下,系统会调用默认的拷贝函数——即浅拷贝,它能够完成成员的一对一拷贝(逐位复制),当类中数据成员没有指针时,利用浅拷贝完全没有问题;但当数据成员中有指针时,如果采用简单的浅拷贝,那么两个类中的两个指针将会指向同一块地址,当对象快结束时,会调用两次析构器,从而导致指针悬挂现象,所以此时必须使用深拷贝简单来说,带指针用深拷贝,不带指针用浅拷贝具体解释无指...

2018-08-09 10:28:54 215

原创 面试知识点总结——虚继承

背景:尽管在派生列表中同一个基类只能出现一次,但实际上派生类可以多次继承同一个类。派生类可以通过它的两个直接基类分别继承同一个间接基类,也可以直接继承某个基类,然后通过另一个基类再一次间接继承该类。出现的问题:在默认情况下,派生类中含有继承链上每个类对应的子部分。如果某个类在派生过程中出现了多次,则派生类中将包含该类的多个子对象,这对于一些类时行不通的。比如iostream继承了ist...

2018-08-08 11:27:50 321

原创 面试知识点总结——map与unordered_map

比较运行效率:unordered_map最高,而map效率较低但提供了稳定效率和有序的序列占用内存:map内存占用略低,unordered_map内存占用略高,而且是线性成比例的需要无序容器,快速查找删除,不担心略高的内存时用unordered_map;对有序容器稳定查找删除效率,内存很在意时候用map。原理map的内部实现是二叉平衡树(红黑树),查找、插入和删除复杂度为O...

2018-08-06 22:02:00 918

原创 面试知识点总结——迭代器失效问题

在STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector、deque);另一类是以不连续节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题。list, set, map容器在使用list、set或map遍历删除某些元素时可以这样使用://正确方法1std::list<int> List;st...

2018-08-06 15:30:53 414

原创 面试知识点总结——操作系统页面置换算法

页面置换算法是在请求分页存储时,调页时候会用到的。页面置换算法的目标是,尽可能减少换入换出次数。常见的页面置换算法有:最优页面置换算法、先进先出算法、最近最久未使用算法(LRU)、时钟页面置换算法、二次机会算法和最不常用算法。我们还会介绍Belady现象。算法介绍最优页面置换算法特点:替换未来很长时间都不会被访问的页面可保证最低缺页率由于需要预知未来,所以很难实现可用作...

2018-08-03 10:05:30 1266

原创 面试知识点总结——排序算法

排序算法比较 冒泡排序 选择排序 插入排序 希尔排序 归并排序 堆排序 快速排序 时间(平均) O(n2) O(n2) O(n2) O(n1.3) O(nlogn) O(nlogn) 时间(最好) O(n) O(n2) O(n) O(n) O(nlogn) O(nlogn) 时间(最差)...

2018-08-02 10:16:43 236

原创 面试知识点总结——构造函数解析

构造函数的作用是在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。一个类可以有多个构造函数,可根据参数个数不同或类型不同来进行构造函数的重载。默认构造函数Student(); //没有参数 //如果创建一个类没有写任何构造函数,系统会自动生成默认的无参构造函数 //系统自动生成的默认构造函数为空,什么都不...

2018-07-31 10:35:24 258

原创 面试知识点总结——字符串操作

本节将对C++中字符串的操作进行整理。字符串长度int len = str.length();len = str.size()字符串比较可以直接进行比较也可以:str1.compare(str2);str1.compare(pos1,len1,str2,pos2,len2);//值为负,0和正附加str1 += str2;str1.append(str2...

2018-07-30 17:14:37 197

原创 面试知识点总结——STL中map的用法

map属于关联容器,提供一对一的数据处理能力。内部是由红黑树实现的,具有自动排序能力。因此map内部的所有数据是有序的。1. 插入操作 在map中插入数据有三种方法:使用数组 用数组方式插入数据#include<iostream>#include<map>#include<string>using namespace std...

2018-07-27 15:35:50 501

原创 面试知识点总结——C++中公有继承、私有继承和保护继承的区别

假设基类是一个快要退休的富豪,代码如下:class RichMan{public: RichMan(); ~RichMan(); int m_company;private: int m_money; int m_car;protected: int m_house;};公司是public的,那么他自己(基类),创业伙伴(友元...

2018-07-24 16:15:07 287 1

原创 面试知识点总结——const和static

const和static关键字的作用可以从两方面回答:一是和类的成员函数或者成员变量相关,二是不属于类的函数或者变量。 const关键字的作用:想要阻止一个变量被改变,可以使用const关键字。在定义该const关键字时,通常要对它进行初始化对于指针来说,可以指定指针本身为const,也可以指定指针所指向的数据为const,或者两者同时指定为const。在一个函数声明中,const可以...

2018-07-24 15:59:28 306

原创 面试知识点总结——new/delete和malloc/free的区别

new/delete是C++中的操作符,而malloc/free是函数,他们都是用来进行动态内存管理的,主要区别如下:new申请的空间在堆或静态存储区,而malloc申请的在堆new在申请空间后会调用构造函数初始化,但是malloc不会;同事delete在释放空间之前要先调用析构函数,而free不会new是操作符,malloc是函数malloc申请的空间成果返回void*的指针,失败返...

2018-07-24 15:21:56 338

原创 面试知识点总结——引用和指针的区别

引用是在C++中才有的,C中没有引用,引用相当于给变量取了一个别名。它和指针的区别如下:指针是变量的地址,引用是变量的别名引用必须初始化(不能为空),但是指针可以为空引用一经初始化就不能再去引用其他变量,但是指针还可以改变sizeof对指针操作求的是指针指向对象的大小,sizeof对引用操作就是变量的大小指针引用自增自减效果不同引用比指针安全(指针有野指针的隐患)当两者做函数参数...

2018-07-24 15:14:12 295

原创 面试知识点总结——构造函数私有化或保护化

本节内容将讨论构造函数能否私有化/保护化,构造函数能否继承和重写,能否将构造函数声明为虚函数的问题。构造函数私有化/保护化 可以将构造函数设置为私有函数,但是这样做就无法从外部直接调用构造函数,因此就无法直接构造这个类的对象。但是为何要将构造函数私有化/保护化呢?如果私有化以后,该如何构造这个类的对象呢?(1)如果你不想让外面的用户直接构造一个类(类A)的对象,而是希望用户只能构造这个...

2018-07-24 14:58:32 287

原创 面试知识点总结——C++中的重载、重写和隐藏

在C++中,经常会遇到函数的重载、重写和隐藏。这三种情况在面试中经常会被问到,因此,我们对这三种情况作出区分。重载 重载通常发生在相同范围内,如同一个类中。重载有以下特点:相同范围函数名相同参数列表不同返回类型相同virtual关键字可有可无重写 重写通常发生在派生类和基类之间。重写的特点如下:不同的范围函数名相同参数列表相同返回类型相同基类函数必须有virtu...

2018-07-24 11:08:38 262

原创 面试知识点总结——对C++面向对象的理解

C++面向对象的特性可以总结为:封装、继承和多态。这也是大多数教材中提到的C++的三大特性。封装: 封装就是讲程序模块化,对象化,把具体事物的特性属性和通过这些属性来实现一些动作的具体方法放在一个类中。对象是封装的最基本单位。属性用变量定义,行为用方法定义,方法可以直接访问同一个对象中的属性。继承: 继承是子类自动共享父类数据和方法的机制。父类的相关属性,可以被子类重复使用,而对于自...

2018-07-24 10:50:16 2066

原创 面试知识点总结——C语言和C++语言区别和联系

C语言和C++语言区别和联系C语言和C++语言的联系:C++是C语言的超集,两者拥有类似的语法C语言和C++语言的区别:C是面向过程的语言,而C++是面向对象的语言C和C++在动态分配内存方面存在差异,C使用malloc/free函数,而C++使用除此之外还有new/delete关键字C语言中没有class,只有struct;C++中两者都有。class的默认访问修饰符是...

2018-07-24 10:26:01 2897 1

原创 牛客网C++知识点整理(持续更新)

1.堆栈的使用栈在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。 堆堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储

2017-09-04 11:38:04 924

原创 下一代WLAN网络干扰管理方法

按架构分类所有的方法按照架构都可以分为集中式和分布式。集中式集中式架构比分布式架构多了一个集中控制器AC,AC的作用主要是对网络中AP进行集中管理,简化了分布式架构中AP的功能,即实现了“瘦AP”+AC的架构。然而集中式架构在硬件上实现比较复杂。分布式分布式架构主要是AP之间实现信息的交互,从而实现各类算法。这样的AP称为“胖AP”,分布式架构的缺点是,一个AP的损坏会导致整个网络中AP信息交互的瘫

2017-09-04 10:20:54 415

原创 关于密集WLAN网络功率控制方法的思考

下一代WLAN网络的使用场景为高密度部署场景。在这种场景中,AP数量和STA输了都很多,且AP之间距离较近。这些特点都使得网络中重叠BSS区域增加,从而导致冲突的发生概率增加。目前研究比较火的干扰管理方法有信道分配、传输功率控制和动态灵敏度控制。 今天说说传输功率控制。传输功率控制方法通过调整AP传输功率,从而调整AP的覆盖范围。例如减小传输功率,使得AP覆盖范围减小,从而消除重叠区域。但

2017-08-16 10:04:19 592

原创 Linux_无法运行可执行文件

本周遇到了一个问题:使用Qt编写好的软件,将其运行之后,生成了可执行文件。但是,当此软件程序的.pro中包含了NS3中的一些.so文件时,只能通过Qt来运行他,无法双击其可执行文件运行。 解决方法:运行不了是因为找不到相关的libns3.19-core-debug.so(或libns3.25-core-debug.so)文件,我们知道ns3的.so文件在build文件夹中,因此需要将这个位置告诉l

2017-05-23 16:44:18 5624

原创 Qt5_在Qt程序中打开网页

当我们在进行界面设计时,通常会在窗口的工具栏设置一个查询或者帮助按钮,这个按钮可以连接到某个网站,如百度或者谷歌的首页。这种功能如何实现? 首先,应该添加头文件#include <QDesktopServices>其次,添加信号槽语句 googleAction = new QAction(QIcon("google.ico"),tr("搜索"),this); connect(googleActi

2017-05-09 16:41:13 2259 1

原创 Qt5_随机产生MAC地址并在QLabel中显示

MAC地址是无线网络中很重要的概念,在界面设计中,如果我们要显示不同的客户端,MAC将是一个很重要的显示参数。今天我们来讲一讲如何在Qt中随机产生一组MAC地址,并将其显示在界面上。当然实际生活中,我们需要读取MAC地址来显示,这里只是为了测试显示功能,因此在系统中随机生成了MAC地址。 MAC地址是由一组十六进制的数字和短线“-”组成的。我们的方法是,先定义一个存储了这16个符号的char类型的

2017-04-24 17:50:14 1045

原创 Qt5_QCustomPlot画实时动态曲线(1)

在Qt中画图的方式有很多,之前我们提到过使用重构paintevent来画实时动态图。本周我们想通过对数据的统计,将统计到的实时数据通过曲线图的方式表现出来。经过调研和查阅资料,我们发现使用QCustomPlot可以很好的完成需求。 QCustomPlot的安装与运行在这里不讲,我们主要来关注如何绘制出实时动态曲线图。 我们的想法是,使得数据向左移,然后将新的数据画出,然后又得到一个新的值,再将数

2017-04-17 17:43:11 23828 5

原创 Qt5_使用QtCreator来运行NS3的脚本

问题提出:现在的情况是,我们使用Qt5来进行图形用户界面的设计,使用NS3仿真平台来完成脚本的运行,实现仿真模拟。然而,如何使用Qt5来直接运行NS3中的脚本呢? 问题解决:有两种解决方法。 第一种方法是直接按照下面这个链接中的方法进行: https://www.nsnam.org/wiki/HOWTO_configure_QtCreator_with_ns-3第二种方法是采用下面这个链接

2017-04-06 15:30:10 1017 2

原创 Qt5_在QWidget中画动态图

在以前的文章中,我们介绍了如何在QTabWidget中画网络拓扑图。今天,我们介绍一下,如何使得所画的图呈现出动态的变化,比如在网络拓扑中,随着时间的变化,一些节点显示红色,一些节点显示绿色。 准备过程:红色和绿色的图片 思路:依旧使用重写paintevent函数来实现画图功能,要使图片随着时间的变化更新,就需要使用计时器来触发页面更新,页面更新可以使用update函数。 代码:#includ

2017-04-05 16:27:29 4440

原创 Qt5_QMovie的使用

有些时候,我们需要在界面上显示动画,简单的动画如gif格式,这种格式的图片无法定义为QPixmap或者QImage的实例,所以就需要我们使用QMovie来进行实例化。接着以前的需求继续讨论,如果在一个无线网络中,有些STA的吞吐量较低,则为了在用户界面上显示出来,就需要我们让代表该STA的指示灯闪红灯。一下是具体的代码实现:QMovie *change2 = new QMovie("红色.gif

2017-03-28 15:10:09 8203 1

原创 Qt5_随机数的生成

在C++中有很多生成随机数的方法,这里介绍一种在Qt中生成随机数的最简单的方法。很多情况下,我们需要生成的随机数是动态变化的,但是随机数的种子要是不修改,生成的随机数永远都是不变的。所以我们可以以当前时间作为种子,这样的随机数将是永远变化的。比如说,我们需要随机生成一组数,然后判断这些数的大小,较大的数相应的图片显示绿色,较小的数相应的图片显示红色。(在实际场景中,可以把生成的数当作某个网络中用户的

2017-03-27 17:11:51 2926

原创 Qt5_在TabWidget中画图

问题提出: 想在TabWidget中进行画图操作,使得它能够显示我想要的图像,如网络拓扑图等。 问题解决: 首先创建QTabWidget对象:mainwindow.h文件中的内容 QTabWidget *topology;mainwindow.cpp文件中的内容 topology = new QTabWidget(parent); imagewid

2017-03-27 14:47:53 6061 1

原创 C++_回调函数的理解

由于最近项目需求,需要学习一些回调函数的知识。对于指针本来掌握就不够熟练的我来说,网上的资料看的也是一头雾水。其实,看文字描述不如看代码描述。下面就介绍一下我所理解的回调函数。 介绍之前,必须提醒读者,不要被“回调”两个字所迷惑,很多人觉得回调函数神秘,就是有了先入为主的观念,被“回调”所欺骗。我们首先来看一段很简单的例子:int main(int argc,char* argv[]){

2017-03-02 10:32:26 426

原创 Qt5_基本对话框之程序启动画面(QSplashScreen)

多数大型应用程序启动时都会在程序完全启动前显示一个启动画面,在程序完全启动后消失。本节主要介绍在Linux系统中如何实现这一功能。首先是mainwindow.h文件,自动生成的代码如下:#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>class MainWindow : public QMainWindow{

2017-02-22 10:14:27 8641

空空如也

空空如也

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

TA关注的人

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