自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 问答 (2)
  • 收藏
  • 关注

原创 C++11 线程池实现

    C++11中已经添加了跨平台的thread相关工具,在一些轻量级使用场景中,使用std::thread无疑会给我们带来很多方便。这里使用它实现了一个简单的线程池:EasyThreadPool.h#ifndef _EASY_THREAD_POOL_H_#define _EASY_THREAD_POOL_H_#include <thread>#include <mu...

2018-03-25 18:35:01 675

原创 nodejs借用管道实现流数据边取边处理

传统的服务器模型中,如果要返回一张本地图片给客户端,需要先读取该图片文件,再发送给客户端。而用nodejs则可以通过管道,将读文件的输入流和发送给客户端的输出流拼接起来,使得服务端无需做过多的处理就能实现数据的边取边处理,提高了服务器的效率。实例如下,一个简单的HTTP服务器,对任何请求都是返回一张图片。var http = require("http");var fs = requ

2017-10-09 22:58:54 596

原创 通过阻塞与非阻塞读取文件操作来认识回调函数

异步编程的主要靠回调实现。回调函数是指在完成任务后就会被调用的函数。目前Node.js的所有API都支持回调函数。 对于读取一个文件,我们可以选择等待文件读取完成在执行操作;也可以先去做别的事情,等文件读取完成时就自动文件内容作为回调函数的参数返回。 1. 以读取文件server.js为例,其阻塞的方法如下://阻塞读文件var fs = require('fs');var content =

2017-09-19 09:09:05 983

原创 Node.js创建第一个应用--HTTP服务器

使用require指令来载入http模块,并将其实例化复制给变量httpvar http = require("http");创建服务器,使用http.createServer()方法创建服务器,并绑定服务监听端口。函数中可以使用request/response参数来接收和响应数据。代码如下:var http = require('http');http.createServer(functi

2017-09-19 09:08:18 577

原创 Ubuntu下配置VScode的C++编程环境

Ubuntu下配置VS code的C++编程环境1、安装VScode直接从官网下载源码包,解压后即可使用2、安装必要的开发环境包括:gcc、g++、gdb、build-essential、Clang3、安装必要插件目前安装的插件如下: 1. C/C++ 2. C/C++ Clang Command Adapter 3. C++ Intellisense 4. ClangComplete 5

2017-08-23 23:00:29 8219

原创 LeetCode 85. Maximal Rectangle(最大子矩阵)

链接:LeetCode 85. Maximal Rectangle这一题要用到直方图最大矩阵作为一个中间结果。class Solution {public: int maximalRectangle(vector>& matrix) { vector tmp; int len=matrix.size(); if(len==0) re

2016-09-04 19:48:32 1458

原创 LeetCode 84. Largest Rectangle in Histogram(直方图最大矩形)

链接:LeetCode 84. Largest Rectangle in Histogram(直方图最大矩形)class Solution {public: int largestRectangleArea(vector& heights) { int len=heights.size(); if(len==0) return 0; s

2016-09-04 19:31:00 376

原创 实现字符串拷贝strcpy和memcpy,以及字符串比较函数strcmp

这些函数是很容易出现在面试笔试中的,需要牢记,其实也是很容易实现的,只不过要考虑周全,注意异常情况判断。/**实现字符串拷贝*为什么要返回char*?(为了支持链式表达式,如strlen(strcpy(p,q)求复制后的长度))*/char* strcpy(char* strDest,const char* strSrc){ if(strDest==NULL||strSrc==

2016-08-28 22:42:51 2247

原创 Linux下给进程重命名

系统提供函数prctl():#include int prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5);使用例子:prctl(PR_SET_NAME, “process_name”, NULL, NULL, NULL);不过这个函数更

2016-08-23 17:07:23 2815 1

原创 二叉树遍历的递归和非递归实现

LeetCode上有三题是直接分别对应二叉树的非递归遍历实现:144/94/145前序遍历:非递归和递归的方式差不多,主要是要注意左右子节点的入栈顺序和递归时恰好相反/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * Tree

2016-08-09 21:19:59 342

原创 LeetCode268. Missing Number

题目链接:https://leetcode.com/problems/missing-number/题目大意:一个数组有n个数,每个数取自0~n,各不相同,找出没有出现的那个数。这题简单,就不细说了,主要是限制条件是使用常量的额外空间,所以设一个标识数组的做法是行不通的。class Solution {public: int missingNumber(vector&

2016-08-02 22:32:52 280

原创 LeetCode96.Unique Binary Search Trees

题目链接:https://leetcode.com/problems/unique-binary-search-trees/大意:给出一个正整数n,求n个不同数组成的排序二叉树的个数思路:二叉排序树的特点是每一个节点,它的左节点比它小,右节点比它大,运用到这一题,可以用动态规划的思想,每一个数都可以作为根节点,如n个数,1~n,当第k个数即k作为根节点时,1-(k-1)在它的左子树,元素数

2016-08-02 18:59:58 224

原创 LeetCode108. Convert Sorted Array to Binary Search Tree

题目链接:https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/大意:给出一个拍过徐的vector,将其转化为一颗排序二叉树,要求高度最低。分析:从排序二叉树的特点分析,就是做二分法。/** * Definition for a binary tree node. * struct Tree

2016-08-02 17:40:34 264

原创 LeetCode22. Generate Parentheses

题目链接:https://leetcode.com/problems/generate-parentheses/大意:给一个整数n,列出n对()所能组成的所有合法排列例:n=3时,有四种排列["((()))","(()())","(())()","()(())","()()()"]分析:n对()就表示一共可以放n个左括号和n个右括号,记录下左括号和右括号的使用情况:只要左括号没有放完,

2016-08-01 19:57:30 228

原创 More Effective C++读书小记

1、仔细区别pointer和references      不论pointer或是references都使你间接参考其它对象。     没有所谓的null reference。一个reference必须总代表某个对象。     如果你有一个变量,其目的是用来指向(代表)另一个对象,但是也有可能它不指向(代表)任何对象,那么你应该使用pointer,因为你可以将指针设为null。换个角度

2016-07-18 17:01:25 1222

原创 C++实现一个不能被继承的类

要设计一个不能被继承的类,考虑C++11的新特性的话,有三种方法:(1)就是将该类的构造函数和析构函数设为private(或者仅仅将析构函数设为private),这样派生类无法调用基类的构造函数和析构函数,从而不能继承。要创建对象,可以在该类中设一个static成员函数,提供返回一个该类对象指针,这种方法比较普遍就不细说。需要注意的是这种方法导致对象只能在heap中产生。那如何能构造一个正常对

2016-07-17 22:03:22 365

原创 Effective C++读书小记

1、视C++为一个语言联邦     对于内置类型而言,pass-by-value通常比pass-by-reference高效。()内置类型在按值传参时,只是将变量的值传递到栈上。 然后被调用函数将值取出后,使用即可。在按引用传参时,需要将被引用的变量的地址压栈, 然后被调用函数首先取出地址,然后再次根据地址寻址获取值。)     C++可分为四个部分:(1)C;(2)Objected-Or

2016-07-08 12:59:46 1231

原创 LeetCode357. Count Numbers with Unique Digits

比较简单的做法是根据排列组合的知识算出n位数各位不相同的数字共有9*9*.....(9-n+2)个(n>=2),当n为1时是10个,然后累加就行。class Solution {public: int countNumbersWithUniqueDigits(int n) { if(n==0) return 1; else if(n==1) r

2016-07-01 12:59:18 303

原创 LeetCode347. Top K Frequent Elements

先利用map统计各数的个数,再用vector存储统计结果,自定义vector排序class Solution {public: vector topKFrequent(vector& nums, int k) { vector m; if(k>=nums.size()) return nums; map cnt;

2016-06-30 15:18:40 255

原创 C++常考面试题

1、static关键字的作用(改变生命周期或者改变作用域)(1)static变量只会初始化一次,存储在静态数据区,具有记忆功能,默认初始化为0;(2)类的静态成员变量属于本类中的所有对象共享,不属于特定的类对象,由该类型的所有对象共享访问,只能在类外初始化;(3)类的静态成员函数也是属于整个类,而非类的对象,不接收this指针,因而只能访问类的静态成员变量;(4)模块内的静态全局变

2016-04-21 10:49:53 1612

原创 LeetCode 338. Counting Bits

比较容易想到的就是一个个数拿出来判断有几个1,判断时可以采用n&(n-1)来简化过程,不过时间复杂度明显就是O(n*sizeof(integer)).。此外可以采用动态规划来做,对于一个大于1的整数,其二进制至少有2位,假设是n位,可以把它分成前(n-1)位和最后1位分别统计。class Solution {public: vector countBits(int num) {

2016-04-14 18:39:36 225

原创 LeetCode155. Min Stack

好像是剑指offer上的原题。主要是要用额外的空间保存当前最小值的信息。class MinStack {public: void push(int x) { num.push(x); if(mins.size()>0){ int min=mins.top(); if(min>=x) mins.push(x

2016-04-11 23:04:23 234

原创 LeetCode 28 Implement strStr()

字符串模式匹配,可以用暴力的方法,也可以用KMP算法。这里只给出KMP算法做记录。#include#includeusing namespace std;class Solution {public: int strStr(string haystack, string needle) { int m=haystack.size(); int n

2016-04-08 20:18:49 225

原创 常用排序算法实现(C++)

/*排序算法*/#includeusing namespace std;/*交换函数*/void swap(int &a,int &b){ int temp=a; a=b; b=temp;}/*冒泡排序*/void BubbleSort(int* a ,int length){ int i,j; for(i=0;i<length-1;++i) { for(j=l

2016-04-08 17:03:00 303

原创 单例模式(C++)

单例模式(Singleton),是保证一个类仅有一个实例,并提供一个访问它的全局访问点。class Singleton{private: Singleton(){};public: static Singleton *instance; static Singleton *GetInstance();};Singleton *Singleton::instance=NULL;

2016-03-28 18:39:21 233

原创 数据库增量备份和差异备份的区别

差异备份:备份上次完全备份以后有变化的数据;增量备份:备份上次备份后有变化的数据。差异备份重点针对的是对一次完整备份后有变化的数据进行备份,而增量备份则针对的是所有类型的备份。

2016-03-28 11:30:58 503

原创 LeetCode70. Climbing Stairs

这题是简单的动态规划问题class Solution {public: int climbStairs(int n) { //动态规划 s[n]=s[n-1]+s[n-2] if(n<=2) return n; int s[n]={0},i=2; s[0]=1; s[1]=2; while

2016-01-27 20:56:09 241

原创 给Virtualbox添加8张host-only网卡

virtualbox 4.3中每台虚拟机最多支持8张虚拟网卡,由于实验需要,全部设置成host-only。VBoxManage modifyvm ovs1001 --nic1 hostonlyVBoxManage modifyvm ovs1001 --hostonlyadapter1 vboxnet0VBoxManage modifyvm ovs1001 --nictype1 82540E

2015-12-17 16:32:22 2524

原创 在ubuntu上安装openvswitch时无法加载openvswitch.ko模块的问题

最近在ubuntu上安装openvswitch,总是卡在openvswitch.ko模块无法加载,还以为是系统的问题。最后查了资料,是它依赖的模块可能没有加载,毕竟别人的教程也是按照他自己的实际系统一步步装的,有点差异很正常。查询需要的,模块查询命令如下:我的环境里需要这两个模块,所以加载openvswitch.ko模块时先要加载这两个依赖模块,加载后成功:

2015-12-10 17:01:07 1484 1

原创 最大公约数、最小公倍数

求最大公约数,用到了辗转相除法,详情可以了解一下欧几里德算法。//最大公约数 m<=nint gcd(int m,int n){ return m==0?n:gcd(n%m,m);}最小公倍数要用到最大公约数//最小公倍数int lcm(int m,int n){ int k=gcd(min(m,n),max(m,n)); //最大公约数 return m/k*n;}

2015-11-27 15:58:44 385

原创 希尔排序

希尔排序是特殊的插入排序,也可以说插入排序是特殊的希尔排序,步长为1.这里就不细讲希尔排序的过程,直接给出C++代码吧。class ShellSort {public: int* shellSort(int* A, int n) { int i,j,temp; int d=n/2; while(d>0){ for

2015-11-04 11:16:31 279

原创 mysql添加外键时报errno: 150错误的解决方法

最近在用数据库时,添加外键总是报错Can't create table  (errno: 150)。两张建表命令分别是:CREATE TABLE `resource_1` ( `id` int(20) unsigned NOT NULL auto_increment, `provider` varchar(20) NOT NULL default '', PRIMARY KEY

2015-11-02 10:38:52 6065

原创 LeetCode 13:Roman to Integer

这题其实很简单,知道罗马数字的规则就可以。从左往右遍历即可。class Solution {public: int romanToInt(string s) { //I(1),V(5),X(10),L(50),C(100),D(500),M(1000) //在一个较大的罗马数字的右边记上一个较小的罗马数字,表示大数字加小数字。 //在一个较大的数字的左

2015-10-22 22:08:42 77

原创 OpenDaylight Lithium 在ubunbtu下的安装

新版的OpenDaylight Lithium版本的安装和Helium版本没有大的区别。1.配置jdk环境(1.7.0_40及以上版本)下载OpenDaylight Lithium网址:https://www.opendaylight.org/downloads2.解压并进入bin目录,运行karaflab401@lab401-VirtualBox:~/ODL/di

2015-09-18 17:20:06 2031

原创 ACM1064:

关键是控制浮点数小数点后数字的输出#include#includeusing namespace std;int main(){ float a=0,b=0; for (int i = 0; i < 12; i++) { cin>>a; b+=a; } b=b/12; cout<<"$"; cout <<setiosflags(ios::fixed); c

2015-08-06 14:58:21 330

原创 ACM1008:Elevator

容易犯的错误就是相邻两数为统一楼层时,应该+5,而不是+0!#includeusing namespace std;int main(){ int N,data[101]={0},sum; while(cin>>N){ if(N==0){ break; } sum=0; memset(data,0,sizeof(data)); for (int i

2015-08-05 23:48:15 245

原创 ACM1089:A+B for Input-Output Practice (I)

用字符串截取转整形,总是不能AC#includeusing namespace std;int main(){ int a=0,b=0; while (cin>>a>>b) { cout<<a+b<<endl; } return 0;}

2015-08-05 14:21:59 316

原创 ACM1001:Sum Problem

#includeusing namespace std;int main(){ int a,tmp,sum; while(cin>>a){ sum=0; for(tmp=1;tmp<=a;tmp++){ sum+=tmp; } cout<<sum<<endl; cout<<""<<endl; } return 0;}

2015-08-04 14:16:48 251

原创 acm1000:A + B Problem

新学习c++,做acm联系,在这做一下记录,新手,代码可能质量不高。#include#include//using std::cin;//using std::cout;//using std::endl;//using std::string;using namespace std;int main(){ int a=0;int b=0; int index=0;

2015-08-04 13:49:41 231

空空如也

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

TA关注的人

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