
c/c++
wejoncy
这个作者很懒,什么都没留下…
展开
-
线程池
实现了一个最简单的线程池,没有考虑惊群现象#include "pthread.h"#include "semaphore.h"#include <list>#include <vector>#include <iostream>using std::list;using std::vector;struct thread_job{ void(*func)(void *);原创 2016-08-07 16:32:53 · 582 阅读 · 0 评论 -
二叉树 后序遍历 非递归总结
学习了这个作者的博客http://blog.youkuaiyun.com/hackbuteer1/article/details/6583988后序遍历是三种遍历中最难的一种(非递归)作者提供了一种非常简单的遍历方式,我稍作修改void PostOrder_Nonrecursive(BiTree T,vector<char>&s) // 后序遍历的非递归 { stack<BiTree> s1;原创 2016-05-08 12:16:36 · 1153 阅读 · 0 评论 -
manacher算法理解笔记
关键语句if (i < mx) P[i] = MIN(P[2 * id - i], mx - i);else P[i] = 0;i表示此时str中第i个字符,id为上一次半径最大,或者向右边延伸最长的中心位置 mx为以id为中心,p[i_id]为半径右边的边缘位置 2*id-i 表示当前i关于id的对应位置举例子 abacdcaba 处理后 $ a # b #原创 2016-05-31 17:07:22 · 447 阅读 · 0 评论 -
socket中的短连接与长连接,心跳包示例详解
原地址http://blog.chinaunix.net/uid-26000296-id-3758651.htmlTCP连接简介当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源转载 2016-04-23 10:29:39 · 1034 阅读 · 0 评论 -
(经典)tcp粘包分析
这两天看csdn有一些关于socket粘包,socket缓冲区设置的问题,发现自己不是很清楚,所以查资料了解记录一下: 一 .两个简单概念长连接与短连接:1.长连接 Client方与Server方先建立通讯连接,连接建立后不断开, 然后再进行报文发送和接收。2.短连接 Client方与Server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接转载 2016-04-22 21:53:12 · 490 阅读 · 0 评论 -
TIME_WAIT
来源于网络time_wait 2MSL主动关闭的Socket端会进入TIME_WAIT状态,并且持续2MSL时间长度,MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间将在网络中消失出现大量time-wait的原因?mysql。close为调用为什么需要time-wai转载 2016-04-22 21:48:50 · 353 阅读 · 0 评论 -
关于TCP的问题总结
原地址http://iam42.iteye.com/blog/1703351一. 什么是TCPTCP 协议是一种面向连接的,为不同主机进程间提供可靠数据传输的协议。TCP 协议假定其所使用的网络栈下层协议(如IP协议)是非可靠的,其自身提供机制保证数据的可靠性传输。在目前的网络栈协议族中,在需要提供可靠性数据传输的应用中,TCP 协议是首选的,有时也是唯一的选择。TCP 协议是在最转载 2016-04-22 21:45:34 · 3039 阅读 · 0 评论 -
select 源码学习记录
先记录一下学习的成果,慢慢完善 四个相关函数 fd_set的结构在上一篇中有讲,同时解释了为什么最大1024. -fd_set为1024/32的long型数组结构体。也就是结构体里面保存了long型数组int FD_ZERO(int fd, fd_set *fdset); int FD_CLR(int fd, fd_set *fdset); int FD_SET(int fd,原创 2016-05-06 21:12:28 · 2470 阅读 · 0 评论 -
为何select做多只支持1024个描述符
内核代码中,原因一览无余 每一位一个描述符,总共1024/8/4*32=1024个原创 2016-05-06 20:14:15 · 7107 阅读 · 4 评论 -
VS2013 error C2146: 语法错误: 缺少“;”(在标识符“PVOID64”的前面) winnt.h 340
在编译邹老师的双目视觉软件中遇到的 环境vs2013 问题 PVOID64 未定义网上找了n多方法,什么调整顺序啦,修改winnt文件啦。。。。 最好还是不要修改winnt吧,都不太有效。然后自己在stdafx.h中加入 #define POINTER_64 __ptr64就可以了原创 2016-05-04 11:21:23 · 5874 阅读 · 2 评论 -
KMP next数组
最近看了这个,突然似乎理解了,记录一下 比如对于子串”abcdabceedabcd” 如何计算next数组,next数组决定字符比较是跳转的位置int next[15]={0};next[0]=-1;然后计算next[1] 前面只有一个a,那么next[1]=0; next[2] 由于前面的next[1]=0;因此,直接比较前面的一个字符‘b’和第一个字符’a’。不同,因此next[2]原创 2016-05-03 12:21:10 · 539 阅读 · 0 评论 -
二叉树转双向链表
http://www.cppblog.com/whspecial/archive/2014/01/03/205123.html将排序二叉树转换成双向链表 Posted on 2014-01-03 00:41 whspecial 阅读(2169) 评论(0) 编辑 收藏 引用 所属分类: 算法&&数据结构 将排序二叉树转化成双向链表,应该是一道很常见的面试题目,网上的实现比较多,有用递归也有用转载 2016-05-08 12:21:39 · 1056 阅读 · 0 评论 -
散列表学习总结
第一个散列函数 将值与键值相映射第二个处理冲突 开放地址发,也就是将所有的值都放在数组中,处理方式 线性探测、二次探测、多个散列函数链式解决法 为了平衡性能,同样可以采用多个散列函数,使得总体平衡完全散列法 其实就是局部hash啦,假设两层,第一层为指针数组,存放hash数组的首地址,第二层才是存储值的hash表,采用两个函数,第一个散列到那个hash表,第二个散列到一个坑里面原创 2016-05-09 09:45:51 · 595 阅读 · 0 评论 -
后缀数组
http://blog.youkuaiyun.com/hackbuteer1/article/details/7968623问题描述 给定一个字符串,求出其最长重复子串 例如:abcdabcd 最长重复子串是 abcd,最长重复子串可以重叠 例如:abcdabcda,这时最长重复子串是 abcda,中间的 a 是被重叠的。 首先,如果输入字符串存储在c[0..n-1]中,那么就可以使用类似于下面的代码转载 2016-05-09 09:46:49 · 332 阅读 · 0 评论 -
并查集详解 (转)
这个文章是几年前水acm的时候转的, 当时也不知道作者是谁, 要是有人知道的话说一下吧并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定。不分享出来真是对不起party了。(party:我靠,关我嘛事啊?我跟你很熟么?) 来看一个实例,杭电1232畅通工程 首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间转载 2016-06-22 15:17:37 · 468 阅读 · 0 评论 -
C ++ 虚函数 (转)
第一节、一道简单的虚函数的面试题 题目要求:写出下面程序的运行结果?1、当上述程序中的函数p()不是虚函数,那么程序的运行结果是如何?即如下代码所示:class A { public: void p() { cout << “A” << endl; } };class B : public A { public: void p() { cout << “B” <<转载 2016-07-27 20:25:25 · 9587 阅读 · 0 评论 -
面试中的Singleton
面试中的Singleton 引子 “请写一个Singleton。”面试官微笑着和我说。 “这可真简单。”我心里想着,并在白板上写下了下面的Singleton实现:复制代码 1 class Singleton 2 { 3 public: 4 static Singleton& Instance() 5 { 6 static Singlet转载 2016-06-19 10:56:16 · 430 阅读 · 0 评论 -
了解c++成员函数调用以及引用
成员函数指针我一直有点困惑在c++的类中并不包含成员函数,比如class A{ public: void a(){cout<<"a";} void b(){} void c(){}};sizeof(A)=1; 然后A A1; A1.a/b/c()是可以工作的。c++是如何找到成员函数的,那我想函数总应该有一个地址,通过取得一个函数的地址来调用函数? 定义函数指原创 2016-06-17 21:41:02 · 6891 阅读 · 0 评论 -
用ISO C++实现自己的信号槽(Qt另类学习)
有网友抱怨:哪个大牛能帮帮我,讲解一下信号槽机制的底层实现?不要那种源码的解析,只要清楚的讲讲是怎么发送信号,怎么去选择相应的槽,再做出反应。也就是类似于一个信号槽的相应流程。。。求解啊!!!看了源码,真的是一头雾水。。。撞墙的心都有了~~~~ 本文使用 ISO C++ 一步一步实现了一个极度简化的信号与槽的系统 (整个程序4个文件共121行代码) 。希望能有助于刚进入Qt世界的C++用户理解转载 2016-07-03 19:40:07 · 430 阅读 · 0 评论 -
深入理解C++中public、protected及private用法
初学C++的朋友经常在类中看到public,protected,private以及它们在继承中表示的一些访问范围,很容易搞糊涂。今天本文就来十分分析一下C++中public、protected及private用法。相信对于大家深入掌握C++程序设计会有很大的帮助。 这里我们首先要明白下面几点。 1.类的一个特征就是封装,public和private作用就是实现这一目的。所以: 用户代码(类外)转载 2016-07-02 10:30:52 · 486 阅读 · 0 评论 -
【STL】各容器成员对比表
摘自:http://www.cplusplus.com本文地址:http://www.cnblogs.com/fangyukuan/archive/2010/09/21/1832675.html转载 2016-06-28 09:40:30 · 628 阅读 · 0 评论 -
windows平台时间函数性能比较QueryPerformanceCounter,GetTickCount,ftime,time,GetLocalTime,GetSystemTimeAsFileTim
http://gmd20.blog.163.com/blog/static/168439232012113111759514/执行 10000000 次, 耗时 2258,369 微秒 QueryPerformanceCounter执行 10000000 次, 耗时 26,347 微秒 GetTickCount执行 10000000 次, 耗时 242,879 微秒 t转载 2016-06-03 21:35:12 · 1455 阅读 · 0 评论 -
c++11 中成员变量初始化的顺序
参考c++11FAQ https://www.chenlq.net/cpp11-faq-chs 11以后可以直接在类里面初始化成员变量,类似这样class A{ int a=1; const int b=a; double c=1.1; const double d=2.2;};static 仍然不行,因为不能进行多次赋值吧。而里面成员变量的赋值顺序则是按照声明原创 2016-05-20 17:16:15 · 999 阅读 · 0 评论 -
Trie树详解及其应用
http://blog.youkuaiyun.com/hackbuteer1/article/details/7964147 一、知识简介 最近在看字符串算法了,其中字典树、AC自动机和后缀树的应用是最广泛的了,下面将会重点介绍下这几个算法的应用。 字典树(Trie)可以保存一些字符串->值的对应关系。基本上,它跟 Java 的 HashMap 功能相同,都是 key-value转载 2016-05-09 09:48:01 · 385 阅读 · 0 评论 -
堆排序的理解
主要看了这位大神的博客,地址>http://blog.youkuaiyun.com/morewindows/article/details/6709644/ 觉得讲的很清楚,不过还是记录一下堆的性质:(最大堆)父节点大于任何一个子节点,因此堆顶元素一定最大 (最小堆),父节点小于任何一个子节点,因此堆顶元素一定最小一般堆中不含重复数据吧~堆排序所谓堆排序,就是把满足性质的一个堆的堆顶元素取出,因为堆顶元素一原创 2016-05-03 12:09:48 · 519 阅读 · 0 评论 -
高效链表排序-归并算法
排序算法应该是最基础的了,快速、归并、选择、堆排序等等对于数组而言可以随机访问,那么对于链表呢,比如快排,两个指针分别网后往前走,而没有前驱指针的单向链表,无法完成这样的操作,当然了可以采用快慢指针的方式,在提交leetcode的时候,发现快排是会超时的。那么对于链表而言,可以采取一种怎么样的高效排序算法呢归并排序分而治之,分别拍好前后两个部分,然后合并两个有序链表,在合适不过,并且由于链表自带属性原创 2016-05-03 11:45:41 · 4768 阅读 · 0 评论 -
KFIFO无锁队列
linux内核中实现了以非常漂亮的无锁队列,在只有一个读者和一个写者的情况下,无需上锁,而拥有线程安全的特性,使得性能相比于加锁方式实现的队列提升数倍KFIFO的分析可见http://blog.youkuaiyun.com/chen19870707/article/details/41083183 这位作者讲的很清楚KIFIO可以实现无锁队列,但是为什么可以实现呢,通过这种方式为什么可以线程安全?换句话说,平原创 2016-05-24 19:01:49 · 2599 阅读 · 0 评论 -
c++ 访问父类方法
当子类继承自父类,实际上所有的成员变量都会继承下来,包括私有变量,但是这些是不可访问的。对于公有成员 子类会拥有父类所有的变量和方法,可以直接访问,当时当子类重新定义了同名变量或方法是,在名字空间上会覆盖父类,因此此时无法直接方法父类的成员。如果想访问父类成员应该声明使用父类空间中的变量 父类::成员对于私有成员 此时虽然内存中存在,但是无法直接访问,如果一定要访问,则可以在父类中定义一个公有方原创 2016-03-02 11:11:03 · 6200 阅读 · 0 评论 -
KMP算法总结
真想说一句“日了KMP”本帖以几乎是转载的,加了一点自己的理解。 网上已经有了各种对KMP算法的讲解,有的易懂,有的复杂,我觉得下面这篇就不错http://www.cnblogs.com/c-cloud/p/3224788.html前言 之前对kmp算法虽然了解它的原理,即求出P0···Pi的最大相同前后缀长度k;但是问题在于如原创 2015-11-13 14:37:42 · 441 阅读 · 0 评论 -
c 语言获得文件大小
int fsize(FILE *fp){ int size; int cur_off = ftell(fpc); fseek(fp, 0, SEEK_END); //将读写位置定位到文件尾 size = ftell(fp); //得到文本文件的字节数 fseek(fp, cur_off, SEEK_SET); //将原创 2015-10-07 20:06:36 · 498 阅读 · 0 评论 -
CImg 图像库 存储结构
在一个程序中,我想把rgb数据给CImg,然后显示出来但是怎么都不对,难道是数据结构不对??于是我验证了一下。使用MATLAB 生成了一幅很小的bmp图片,然后用CImg读取出来,果然MATLAB 的 位维度 RGB然后在CImg显示则是RRRR...................GGGGGGGGGGGGGG................BBBBBBBBBB原创 2015-10-07 18:50:18 · 1252 阅读 · 0 评论 -
codeblock 编译CImg
平台为win8.1下载了CImg的库,想用codeblock试试,结果发现,各种报错,主要是没有库然后把user32.lib;Gdi32.lib;拷贝到当前目录下,并且设置连接库和连接路径还是不行奇怪了,想了想,gcc后面的的库 -lxxxx 名字对应的应该是libxxx,把user32.lib改为libuser32.lib,另一个库同样如此,就可以了原创 2015-09-10 13:40:07 · 636 阅读 · 0 评论 -
c/c++ 取得当前目录
char *_getcwd(char *buffer, int maxlen); //ANSI版本wchar_t *_wgetcwd(wchar_t *buffer, int maxlen ); //Unicode版本 参数说明buffer: Storage location for the path.maxlen:Maximum length of the path原创 2015-08-26 19:23:05 · 1303 阅读 · 0 评论 -
xcorr 自相关 c++实现
xcorr 函数在MATLAB里面很好用啊,c语言怎么实现呢?诸如此类的如卷积啊,就是有点绕由于自相关具有对称性,直接计算前一半的数值就行了。直接贴代码void xcorr_func(vector &in , vector &out){ int lenth=in.size(); for (int i=0;i<=lenth;i++) { for (int j=0;j<=i;原创 2015-06-13 10:32:26 · 7854 阅读 · 1 评论 -
归并排序的理解记录
记录一下归并排序的学习心得使用了分治算法,分而治之,fft就是一个典型的例子。 把大问题分解成小问题,不但使得问题简化,而且效率也高出了很多, 归并排序采用分裂组合的方式,没分裂组合一次,小问题的解即可得出,下一次在此基础上在分裂组合。 举个例子吧,假设从大到小排序对 1 4 3 2进行排序,首先分裂它,变成小问题原创 2015-02-01 15:29:08 · 548 阅读 · 0 评论 -
c++ 思考
C++,难学,好用,估计是大多数人的观点,但也有认为c++什么都能干,但什么也不能干。C++有着比c略低的效率,有着面向过程和面向对象相兼容的语法,估计这也是不同想法的原因之一。最近看了几本c++的书籍,感受颇深,难,真的很难,之前没有这么了解c++之前,觉得就是比c多了一点面向对象嘛,不是差不太多?强,能干的事情真的很多,当然了,有说大部分语言也是能干很多事情吧,是的,但是他们有着很多的限制,我了原创 2016-03-02 11:17:31 · 638 阅读 · 0 评论 -
返回引用和对象
返回对象涉及生成返回对象的临时副本,因此,返回对象的时间成本包括调用复制构造函数来生成临时副本和调用析构函数删除副本。,返回引用也可以节省时间和内存 不可以返回引用的情况不能返回临时对象的引用,因为临时对象会消失,返回空引用是非法的 因此,如果要返回临时对象则不返回引用返回的是通过引用或指针传递的对象,则应该返回引用原创 2016-03-04 20:34:35 · 695 阅读 · 0 评论 -
c++ const 关键字
(1) const 修饰一个常量,表示不可修改比如修饰指针和引用修饰指针时const 靠近类型还是*决定不可变的是指针这个变量本身还是指针所指向的变量比如int b=100;const int *a=&b; //指针本身不可变,也即是不能实现a++,a--这种类似修改指针的行为int const *a=&b;//这里则是a指向的内容不能变,即(*a)之类的修改所指向变量的行原创 2016-03-05 16:01:00 · 408 阅读 · 0 评论 -
牛客《今日头条》笔试题
最后一题 或与加如果x+y=x|y 表示x y满足或与加要求,输入两个数x,k,输出 第k小的y;示例 输入 5 1输出2,由于 5+1!=5|1 ,因此第一小的数为2分析:显然满足x+y=x|y的数,有部分0 1互补的特点,也就是只有在x(y)为0的比特位置,y(x)才能为1,不然相加是必然产生进位。因此(x&y==0)成立第k小,其实就是在x为0的位置进行二进制计数,比如100100011,第一原创 2016-04-28 09:06:47 · 5348 阅读 · 2 评论 -
暴雪hash算法,(不理解?稍作改进?)
看了July关于暴雪Hash算法的讲解,有几个地方没理解。原文地址 http://blog.youkuaiyun.com/v_JULY_v/article/details/6256463http://blog.youkuaiyun.com/v_july_v/article/details/7085669暴雪hash与普通hash不同的是,使用了更好的hash值使用3个hash值,一个用于查找,两个用于原创 2016-04-29 12:06:05 · 1190 阅读 · 0 评论