c/c++
文章平均质量分 57
sunlylorn
2010.7校招加入腾讯目前就职于360搜索
展开
-
Head-first设计模式(一)——策略模式(Strategy Pattern)
一、定义策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。二、类图三、代码class Duck { public: Duck(); ~Duck(); void swim(); void display(); void quark(); void fly(); void se原创 2012-05-06 14:37:45 · 744 阅读 · 0 评论 -
linux下调试内存泄露的利器Valgrind
Valgrind的主要作者Julian Seward刚获得了今年的Google-O'Reilly开源大奖之一──Best Tool Maker。让我们一起来看一下他的作品。Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,它包含一个内核──一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务──调试,分析,或测试等。Valgrind可以检测内存泄漏和内存违转载 2012-08-06 21:01:04 · 4783 阅读 · 0 评论 -
Valgrind中文使用手册
名字: valgrind是一个调试和剖析的程序工具集。概要用法: valgrind [[valgrind] [options]] [your-program] [[your-program-options]]概述: Valgrind是一个Linux下灵活的调试和剖析可执行工具。它由在软件层提供综合的 CPU内核,和一系转载 2012-08-06 21:38:32 · 3698 阅读 · 0 评论 -
OpenCV 编程简介(矩阵/图像/视频的基本读写操作)
<!--@page {margin:2cm}pre {font-family:"DejaVu Sans Mono",monospace}h4 {margin-bottom:0.21cm}h4.western {font-family:"DejaVu Serif",serif}h4.cjk {font-family:"DejaVu Sans"; font-转载 2012-09-01 10:15:47 · 2216 阅读 · 0 评论 -
c++ string 和 stl算法
toupper,tolower地球人都知道 C++ 的 string 没有 toupper ,好在这不是个大问题,因为我们有 STL 算法:string s("heLLo");transform(s.begin(), s.end(), s.begin(), ::toupper);cout transform(s.begin(), s.end(), s.begin(), ::转载 2012-11-01 11:21:31 · 1595 阅读 · 0 评论 -
hash_map 与 hash_set 详解
1 数据结构:hash_map原理这是一节让你深入理解hash_map的介绍,如果你只是想囫囵吞枣,不想理解其原理,你倒是可以略过这一节,但我还是建议你看看,多了解一些没有坏处。hash_map基于hash table(哈希表)。 哈希表最大的优点,就是把数据的存储和查找消耗的时间大大降低,几乎可以看成是常数时间;而代价仅仅是消耗比较多的内存。然而在当前可利用内存越来越多的情况下,用空转载 2012-11-26 15:07:29 · 1067 阅读 · 0 评论 -
使用C++(通过Thrift)访问/操作/读写Hbase
要使用C++访问Hbase,可以走的途径少之又少,据说当前最好的方法就是通过Thrift来实现:http://thrift.apache.org/所以本文分成几部分:(1)安装Thrift;(2)用Thrift 生成访问Hbase所需的C++文件;(3)在程序中通过Thrift来访问Hbase。另外,本文只包含读写Hbase数据的例子,不包含配置Hbase的方法,如需这些内容,转载 2013-05-13 14:02:03 · 1873 阅读 · 0 评论 -
boost中的智能指针shared_ptr的指针管理
最近在阅读《Beyond the C++ STL》一书的shared_ptr一章时,遇到点困惑,记录如下:原书44~45页#include "boost/shared_ptr.hpp" #include #include class A { public: virtual void sing()= protected: virtual ~A() {};原创 2013-06-26 15:05:11 · 2685 阅读 · 0 评论 -
坑爹的hiredis API使用
hiredis是redis的官方C API,但是不得不说API的使用很坑爹。hiredis提供了一个名为redisCommand的API用于向redis server发送命令,redisCommand的函数原型如下:void *redisCommand(redisContext *c, const char *format, ...)貌似很牛逼的样子,提供了类似printf原创 2013-07-04 15:48:49 · 16954 阅读 · 7 评论 -
程序遇到core的时候 使得程序继续执行的解决办法
最近有点懒了,好久没有更新博客了,今天来一发。在代码开发过程中,我们经常会遇到程序core掉,这个时候正常的处理步骤是,我们保留程序的coredump,然后分析,进而找出程序的bug,fix it!但是,如果你的程序是线上服务,而且只会有极少数的输入会导致程序core掉,而且你允许可以有少量错误发生,那么这时候,我们的一个直观想法是,有没有什么方法可以 跳过这些该死的极少数异常数据原创 2013-11-20 15:37:07 · 3781 阅读 · 0 评论 -
protocol buffer
This tutorial provides a basic C++ programmer's introduction to working with protocol buffers. By walking through creating a simple example application, it shows you how toDefine message formats转载 2012-05-24 14:26:28 · 5193 阅读 · 0 评论 -
跳跃表Skip List
这是跳表的作者William Pugh给出的解释:Skip lists are a data structure that can be used in place of balanced trees. Skip lists use probabilistic balancing rather than strictly enforced balancing and as a result转载 2012-05-23 14:26:47 · 878 阅读 · 0 评论 -
GNU C 中的__attribute__ (一)
One of the best (but little known) features of GNU C is the __attribute__ mechanism, which allows a developer to attach characteristics to function declarations to allow the compiler to perform more e转载 2012-05-07 22:15:52 · 734 阅读 · 0 评论 -
GNU C 中的__attribute__ (二)
constructor and destructor:The constructor attribute causes the function to be called automatically before execution enters main (). Similarly, the destructor attribute causes the function to原创 2012-05-07 22:24:37 · 708 阅读 · 0 评论 -
Head-first设计模式(二)——观察者模式(Observer Pattern)
一、定义 观察者模式在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。二、要点观察者模式定义了对象之间的一对多关系主题(可观察者)用一个共同的接口来更新观察者可观察者不知道观察者的细节,只知道观察者实现了观察者接口使用此模式时,你可从被观察者处推(push)或者拉(pull)数据(然而,推的方式被认为更“正确原创 2012-05-06 17:16:50 · 898 阅读 · 0 评论 -
c99之 柔性数组成员(flexible array member)
在讲述柔性数组成员之前,首先要介绍一下不完整类型(incomplete type)。不完整类型是这样一种类型,它缺乏足够的信息例如长度去描述一个完整的对象。6.2.5 Typesincomplete types (types that describe objects but lack information needed to determine their sizes).C与C++转载 2012-05-07 22:47:15 · 12949 阅读 · 2 评论 -
打印unsigned long long int
如果你想使用inttypes.h中的int32_t, int64_t,uint64_t等数据类型,如何对其进行printf是需要仔细考虑的。在32位平台和64位平台对uint64_t的定义是不同的:32位平台: typedef unsigned long long int uint64_t;64位平台: typedef unsigned long int uint64原创 2012-05-28 22:09:21 · 22019 阅读 · 0 评论 -
linux HZ Tick Jiffies
Linux HZLinux核心几个重要跟时间有关的名词或变数,底下将介绍HZ、tick与jiffies。 HZ Linux核心每隔固定周期会发出timer interrupt (IRQ 0),HZ是用来定义每一秒有几次timer interrupts。举例来说,HZ为1000,代表每秒有1000次timer interrupts。 HZ可在编译核心时转载 2012-05-28 22:51:30 · 1989 阅读 · 0 评论 -
GCC 提供的原子操作
gcc从4.1.2提供了__sync_*系列的built-in函数,用于提供加减和逻辑运算的原子操作。其声明如下:type __sync_fetch_and_add (type *ptr, type value, ...)type __sync_fetch_and_sub (type *ptr, type value, ...)type __sync_fetch转载 2012-05-16 11:53:23 · 953 阅读 · 0 评论 -
C语言宏定义中的void
在看代码的时候,我们经常发现C语言的宏定义中会出现void,如:#define DICT_NOTUSED(V) ((void) V)其实这里的void仅仅是去掉编译器对木有使用的局部变量的警告。原创 2012-05-18 11:39:53 · 2144 阅读 · 0 评论 -
min()的宏定义中的(void) (&_x == &_y)的含义
近日无意间发现,关于常见的min的宏定义,在Linux中是这样的:/** min()/max()/clamp() macros that also do* strict type-checking.. See the* "unnecessary" pointer comparison.*/#define min(x, y) ({ \typeof(x) _x = (x);转载 2012-05-18 11:43:15 · 2426 阅读 · 0 评论 -
在OpenCV中自适应确定canny算法的分割门限
在OpenCV中用canny算子进行边缘检测速度很快,不过有点不爽的就是高低阈值需要输入。在OpenCV中自适应确定canny算法的分割门限 一文仿照matlab中的做法,对canny函数进行了修改,以便当用户没有指定高低阈值时,由函数自适应确定阈值。代码如下:// 仿照matlab,自适应求高低两个门限CV_IMPL void AdaptiveFindThreshold(CvMat *原创 2012-09-25 10:35:44 · 16858 阅读 · 17 评论