c++
文章平均质量分 67
qiqll
这个作者很懒,什么都没留下…
展开
-
C++跨平台开发心得小结
linux编程与windows编程的差异之处: 1. 文件与目录的大小写以及路径分隔符的差别 windows下不区分大小写,路径分隔符一般使用"/";linux下区分大小写,路径分隔符使用"/"。 2. itoa()函数在linux下并不存在 所以使用类似sprintf();之类的函数是个不错的替代。(为什么说是类似函数,看下面一条啦) 3. _snprintf()与_vsnprintf()的差别 sprintf()不能检查目标字符串的长度,可能造成众多安全问转载 2010-10-19 10:46:00 · 1974 阅读 · 0 评论 -
快速查找出现一次的数字
在一个长度为n的整形数组a里,除了三个数字只出现一次外,其他的数字都出现了2次。请写程序输出任意一个只出现一次的数字,程序时间和空间复杂度越小越好。例如: a = {1,3,7,9,5,9,4,3,6,1,7},输出4或5或6该算法用于在一个集合中,其他数字都是出现偶次,只有一个或三个数字出现一次,求任意一个出现一次的数字。主要用到了异或操作和通过最小位的标记找单独数的技巧。原创 2016-02-29 10:09:20 · 647 阅读 · 0 评论 -
并查集的实现
并查集用于解决元素集合中,元素关系的集合的问题。例如给出两两关系,最后看整个集合中,谁是一伙的,有关系的。//// union_find.c// calc//// Created by lixia on 16/2/28.// Copyright © 2016年 qll. All rights reserved.//#include int n,m,pre[1000]原创 2016-02-29 09:59:08 · 465 阅读 · 0 评论 -
mongo c driver 在linux下编译使用
mongoDB现在是一个使用比较多的数据库,因为近日想存一些东西,所以,使用了一下。首先,安装mongoDB服务器端。现在出到了3.0,可以直接到官网下载。然后启动。如果想用命令行看的话,就到/usr/local/mongo/bin 使用./mongoc,就进到了命令行中。前面的很多人介绍,我就不细说了。然后是需要用类库操作mongoDB。我用的是mongo c driver,下载原创 2015-03-12 18:37:54 · 5947 阅读 · 0 评论 -
setjmp和longjmp函数
今天发现一个特别有意思的函数对,setjmp和longjmp原创 2014-10-13 18:23:35 · 783 阅读 · 0 评论 -
ptmalloc分配器的分析
1 前言2 x86平台Linux程序的内存分布3 Allocator4 chuck的组织4.1 chuck4.2 chunk中的空间复用5 空闲 chunk 容器5.1 Bins5.2 Fastbins5.3 Unsorted Bins5.4 例外的 chunk6 sbrk & mmap6.1 sbrk6.2 mmap转载 2013-02-20 16:16:38 · 636 阅读 · 0 评论 -
c++宏定义中 #,#@,##的用法
在glibc中发现有这种用法 #define GLRO(x) _##x后查询发现,原来是连接字符用的,和他相似的还有“#”和“#@” 1.“#”的用法#就是表示后面的是个表示符是个字符串,例如#define str(a) #aprint(str(abc)); ==> print(“abc”) 2.“#@”的用法#@就是表示后面的是个表示符是个字符,例如原创 2013-02-18 17:18:14 · 656 阅读 · 0 评论 -
实现一个lockfree的队列——错误修改
上篇文章:实现一个lockfree的队列写了上一个文章后,对于速度不满意,于是又琢磨了一下,发现了一个很严重的错误。这个错误是同事发现的。他说曾经发现,有时某个线程能被挂起很长时间。如果有这样的情况,就可能会造成第一轮的A线程和第二轮的B线程访问同一个下标,这无疑是会出问题的。于是我把下面放值和取值的时候也做了个限定,只有一个线程能通过该锁,这样就安全了。修改了标记的设定,不用原创 2012-09-19 15:39:03 · 1243 阅读 · 0 评论 -
__sync_fetch_and_add系列的命令
__sync_fetch_and_add系列的命令,发现这个系列命令讲的最好的一篇文章,英文好的同学可以直接去看原文。Multithreaded simple data type access and atomic variables __sync_fetch_and_add系列一共有十二个函数,有加/减/与/或/异或/等函数的原子性操作函数,__sync_fetch_and_add,转载 2012-09-12 16:12:46 · 35258 阅读 · 0 评论 -
从linux shell命令行输出中取得数据以及jwsmtp使用实例
为了从日志文件中统计信息,所以用到了grep命令。觉得手动麻烦,就想着写个程序,每天自动执行一次这个命令,把结果写成邮件自动发我邮箱里。找了些资料,发现用popen函数可以执行shell命令,命令的结果可以通过fgets得到。程序如下:static int execCmd( char* cmd, char* retbuf, int bufsize ){ FILE* fp =原创 2012-09-18 10:18:43 · 2951 阅读 · 1 评论 -
实现一个lockfree 的队列
看梁总的题目,实现高速队列,百思不得其解。后来看了答案,算是比葫芦画瓢实现了一个。其实最重要的两点:1。实现一个原子加加,用来得到一个唯一下标。2.用一个永远不会使用的值当标记,验证该下标对应的位置是否有值。代码如下: // 临界锁,线程安全// 必须要有一个不会用的空值,template class CQQueue_Lockfree{public:原创 2012-09-12 13:02:42 · 1869 阅读 · 0 评论 -
指定长度的strstr函数
前一段工作中用到了,找了几个方法。都实现了一下,测试了下,都差不多,glibc的实现方法相比还是快一些,stristrex也不慢,至于qi_strnstr,是自己的一个想法实现的,不过可悲的是,他是最慢的。 char *glibc_strnstr (const char *phaystack, const char *pneedle, int len){ typedef unsig原创 2012-08-22 15:06:21 · 4702 阅读 · 0 评论 -
GBK和Utf-8字符串截取函数
工作中用到了,就写了一个。GBK编码从0x8140-0xFEFE,去除0xxx7F这部分。包括了所用的中日韩字符集。判断是否为GBK可以用isGBKChe 或 isGBKChe2,都可以。一个是从区间判断,一个是从第一个字节的头位为一这个特性判断。typedef unsigned char var_u1;#define isZone(p,a,b) ( (p) >= (a原创 2012-08-21 18:14:45 · 976 阅读 · 0 评论 -
字符集GBK和UTF8的区别说明
GBK就是在保存你的帖子的时候,一个汉字占用两个字节。。外国人看会出现乱码,此为我中华为自己汉字编码而形成之解决方案。UTF8就是在保存你的帖子的时候,一个汉字占用3个字节。。但是外国人看的话不会乱码,此为西人为了解决多字节字符而形成之解决方案。ASCII(ISO-8859-1)是鼻祖,最简单的方式,字节高位为0GB2312、GBK、GB18030,这几个是中文编码方式,并向下兼容。G转载 2012-08-21 13:56:49 · 1292 阅读 · 0 评论 -
典型 PC 系统各种操作指令的大概时间
典型 PC 系统各种操作指令的大概时间 execute typical instruction 执行基本指令1/1,000,000,000 sec = 1 nanosec fetch from L1 cache memory 从一级缓存中读取数据0. 5 nanosec branch mispre转载 2012-08-30 10:18:26 · 1219 阅读 · 0 评论 -
做一个懒惰的程序员
<br />首页声明一下,原文的地址是:http://blog.imalbert.com/archives/35.html,下面是原文:<br />~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~(华丽丽滴分界线)<br />本文写给所有可爱的程序员,(我)你们都是一群可爱的,用双手建造世界的思想家。<br />从今天起,我要做一个懒惰的程序员。<br />第一 拒绝鼠标<br />从今天,我将拒绝鼠标。<br />鼠标,是鼠标手的根源,无数的程序员都被鼠标手转载 2011-04-11 18:26:00 · 482 阅读 · 0 评论 -
编辑距离算法
好几年前写的编辑距离算法,几年不看就忘了,先记录下来吧。const UINT8_T CIndvstryword::LDCompare(char *lpszStrA,const UINT16_T uStrLenA, char *lpszStrB,const UINT16_T uStrLenB){ if( lpszStrA == NULL || lpszStrB == NULL ) r原创 2016-02-29 10:25:16 · 730 阅读 · 0 评论