C/C++
xuzhezhaozhao
这个作者很懒,什么都没留下…
展开
-
Linux 下 profile 技巧
Linux 下 profile 技巧用 profiler 来查看程序最耗时的部分, 以便在正确的地方优化是很重要的.zoom 一个图形化的 profiler, 非常简单, 而且好用, 入门教程, 注意编译的时候加上 ‘-O2 -g’ 参数以开启优化并保留符号列表. 最简单的用法就是启动 zoom 后点击 start, 然后马上运行你要 profile 的程序, 程序运行结束后点击 stop.原创 2015-09-17 19:07:31 · 2618 阅读 · 0 评论 -
使用Doxygen生成代码文档
doxygen 是一种用于 C/C++、Java™、Python 和其他编程语言的文档系统。其功能类似于原创 2014-09-13 21:46:42 · 1635 阅读 · 0 评论 -
LLVM Pass 初探
1. 首先要配置环境原创 2014-09-12 22:46:53 · 4483 阅读 · 1 评论 -
gdb中调试stl
GDB中print方法并不能直接打印STL容器中保存的变量,其实只要http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txt这个文件保存为~/.gdbinit 就可以使用它提供的方法方便调试容器.转载 2014-09-09 21:38:52 · 2137 阅读 · 0 评论 -
Linux下图形化调试工具: kdbg, Affinic
在linux下调试确实是个很麻烦的事, 用gdb调试不怎么方便, 没有在windows下用vs爽, 主要原因还是因为gdb是用命令行形式, 其实在linux下也有一些基于gdb的图形化调试工具.1. kdbgubuntu下 直接 sudo apt-get install kdbg 即可安装.若启动后出现 MNG error 11: Function is invalid at原创 2014-09-06 22:33:16 · 12872 阅读 · 0 评论 -
动态规划:从新手到专家
作者:Hawstein出处:http://hawstein.com/posts/dp-novice-to-advanced.html声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处。前言本文翻译自TopCoder上的一篇文章: Dynamic Programmin转载 2013-10-09 23:07:55 · 2118 阅读 · 0 评论 -
C++ 完美破解九宫格(数独)游戏
看到CSDN上有位大神用C#写了一个破解数独的程序(点击打开链接),不过我对C#也不懂,比较喜欢C++,就用标准C++也写了一个,希望各位喜欢。三纯程序,纯控制台程序,纯各人爱好,纯算法程序,无win API。基本思路与之前那个类似,采用brute force加剪枝,找到第一个符合条件的情况就立即退出不再查找。一般一个合格的数独只有唯一解,如果你的数独多解的话,那也就不叫数独了。代码如原创 2013-07-31 22:43:30 · 10813 阅读 · 3 评论 -
STL常用函数小结
下面是看Effective STL过程总结的一些比较常用的STL算法。注意:1. 对某些容器来说,执行某些操作后可能使当前的迭代器、指针和引用失效,这一点要特别注意,Effective STL P36 第9 条谈到这一点。2. 使用reserve成员函数改变当前容量以减少内存重新分配次数。3. (第17条)使用swap技巧除去多余容量。不过C++11已经添加了shrink_原创 2013-07-31 18:57:55 · 1755 阅读 · 0 评论 -
Effective STL 学习笔记
看Effective STL 作的一些笔记,希望对各位有帮助。以下是50条条款及相关解释。容器1. 慎重选择容器类型,根据需要选择高效的容器类型。2. 不要试图编写独立于容器类型的代码。3. 确定容器中的对象拷贝正确而高效。也就是防止在存在继承关系时发生剥离。4. 调用empty而不是检查size()是否为0来判断容器是否为空。原因是调用empty比检查size()更加高效。5. 尽量使用区间成员,而不是多次使用与之对应的单元素成员函数,原因是这样更加高效。如尽量使用vector的原创 2013-07-31 18:56:21 · 1970 阅读 · 0 评论 -
VS2010 error: LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
安装VS2012后结果使用VS2010时, 出现错误 LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt解决办法也很简单, 如下: To summarize:Either disable incremental linking, by goi原创 2013-07-24 14:17:50 · 16740 阅读 · 4 评论 -
Makefile语法详解 - 从入门到精通
由浅入深详细介绍Makefile的编写方法。概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一 个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要 了解HTML的标识的含义。特别在Unix转载 2013-05-03 12:12:19 · 3895 阅读 · 0 评论 -
Linux 下编译使用Boost
Boost是什么不多说, 下面说说怎样在Linux下编译使用Boost的所有模块.1. 先去Boost官网下载最新的Boost版本, 我下载的是boost_1_56_0版本, 解压.2. 进入解压后目录: cd boost_1_56_0, 执行下面的命令:$ ./bootstrap.sh --prefix=path/to/installation/prefixprefix的原创 2014-09-26 18:06:09 · 4366 阅读 · 0 评论 -
Linux 下查找 .so 文件中函数入口
有时候会想知道 .so 文件中某些信息,比如版本,函数入口等。strings 命令是个很有用的命令,比如我想知道 libstdc++.so 这个动态库里面是否有 refill 函数,可以用$ strings libstdc++.so | grep refill输出_ZN9__gnu_cxx17__pool_alloc_base9_M_refillEm由于 c++ 编译后会修改函数签名,可以用 c++原创 2016-10-09 20:07:02 · 6701 阅读 · 0 评论 -
GDB调试技巧
GDB调试技巧自己经常用到的一些GDB命令. - si 单指令执行 - display/i $pc 执行si命令时打印汇编代码 - 回车 重复上一条命令 - b 断点, b *0x8048a45 在指定内存位置停止, 也可以设在函数名上 - n 单语句执行 - c 继续执行 - finish 结束当前函数 - bt 查看函数堆栈 - shell 执行shell命令 - li原创 2016-08-26 11:45:40 · 1261 阅读 · 1 评论 -
GDB调试中将信号发送给程序的方法
在看CSAPP的chapter 8 Exceptional Control Flow时发现用GDB调试程序时程序无法接收到ctrl-c发送的终止信号, 上网查了一下, 原来是因为GDB默认会截获信号, 使调试程序无法接收到信号, 要使调试程序能够接收到信号有两种办法:(1)改变gdb信号处理的设置 比如,以下设置会告诉gdb在接收到SIGINT时不要停止、打印出来、传递给调试目标程序原创 2013-05-07 13:49:30 · 7261 阅读 · 0 评论 -
GCC Tips
GCC Tips-print-file-name 打印默认的头文件搜索路径$ gcc -print-file-name=include/usr/lib/gcc/x86_64-linux-gnu/4.8/include-dM 不做实际的预处理,仅仅列出所有#define的宏, 这些宏大部分与体系结构和GNU相关,或来自所包含的头文件。$gcc -E -dM hello.c另外,还有一些-d原创 2015-08-23 18:09:57 · 689 阅读 · 0 评论 -
处理字符串时如何选择buffer的大小和分配方式 - 看看 redis 是怎么做的
最近在阅读 redis 代码, 觉得 如何阅读 Redis 源码 提供了的阅读顺序还不错, 因为之前有读过 lua 代码, 也有一点经验, 作者建议的顺序还是比较合理的. 所以先从 redis 的内部字符串的实现开始看起, 在阅读过程中看到一个我个人认为很赞的技巧. 先贴代码:(不得不说, redis 的代码注释真是详尽到了极致 … lua的注释很本没法比啊)sds sdscatvprintf(sd原创 2015-05-16 21:12:18 · 1656 阅读 · 0 评论 -
Linux中getopt函数用法
最近做cache lab 用到了getopt函数, 用man 3 getopt查看了下用法, 做个总结.描述:getopt函数是用来解析命令行参数的, 以‘-’或‘--’开头的参数为选项元素,除去‘-’或‘--’的选项元素为选项字符。如果getopt函数被重复调用,则它将会依次返回每个选项元素中的选项字符。使用getopt函数需要包含以下头文件:#include #in原创 2013-05-01 11:25:24 · 20983 阅读 · 3 评论 -
ubuntu 下使用 jsoncpp库
做项目的时候需要用c++解析json文件,原创 2014-10-14 17:00:51 · 6624 阅读 · 0 评论 -
C++中的new/delete与operator new/operator delete
C++中的new/delete与operator new/operator deletenew operator/delete operator就是new和delete操作符,而operator new/operator delete是函数。new operator(1)调用operator new分配足够的空间,并调用相关对象的构造函数(2)不可以被重载operator ne转载 2014-10-13 11:56:21 · 1094 阅读 · 0 评论 -
C++中const用法详解
本文主要内容来自CSDN论坛: http://bbs.csdn.net/topics/310007610我做了下面几点补充.补充:1. 用const声明全局变量时, 该变量仅在本文件内可见, 类似于加了static修饰.下面的全局变量声明const int states = 50; 与stacic const int states = 50; 效果相同;这样规定原创 2013-07-17 23:42:54 · 1815 阅读 · 1 评论 -
Linux cat 命令源码剖析
最近在读APUE, 边看还得边做才有效果. 正好linux下很多命令的是开源的, 可以直接看源码. GNU coreutils 是个不错的选择. 源码包有我们最常用的 ls, cat等命令的源码, 每个命令都比较短小精悍, 适合阅读. 下面是我阅读 cat 命令的一点笔记.到这里下载源码. 在源码根目录下 ./configure; make 就可以直接编译, 修改后make就可以编译了. 命令源码在 src/目录中, lib/目录下有一些用到的辅助函数和常量定义.原创 2014-11-07 21:05:52 · 9375 阅读 · 3 评论 -
看代码学C++
在实验室看大牛师兄的C++代码,边看边学原创 2014-09-03 18:13:46 · 1469 阅读 · 0 评论 -
C/C++中字符串与数字相互转换
a转载 2013-07-03 23:29:31 · 1169 阅读 · 0 评论 -
关于C++ const 的全面总结
作者整理的非常好, 版式很好, 感谢!原文地址: http://blog.csdn.net/eric_jo/article/details/4138548C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型转载 2013-07-17 23:45:23 · 1249 阅读 · 4 评论 -
C语言在printf函数中打印'%'符号
碰到要打印'%'符号的一个程序, 突然发现这个符号是特殊符号, 用 \% 转义也不行, 查了一下, 原来要连续两个%才是打印出一个%. 如下: printf("所占比例: %%%d", percent);前两个%打印一个%, 第三个%才是特殊符号.原创 2013-05-07 14:36:39 · 15984 阅读 · 0 评论 -
C语言陷阱:浮点运算
在Stack overflow上看到这样一个问题。计算如下表达式的值:P=(1/2-3/4)*(5/6-7/8)*...*[n/(n-1) - (n+2)/(n+3)]。程序如下:#include int main (){ float s, p = 1.0; int i, n; printf("Put a number:"); scanf("%d", &n); f原创 2013-04-26 23:26:08 · 1569 阅读 · 0 评论 -
C语言代码规范
(文章是Linux内核编程C语言代码规范,但可以作为C语言代码规范标准)Linux kernel coding styleThis is a short document describing the preferred coding style for thelinux kernel. Coding style is very personal, and I won't _force_转载 2013-04-24 23:55:38 · 1804 阅读 · 0 评论 -
深入剖析变长参数函数的实现
什么是变长参数?所谓含有变长参数的函数是指该函数可以接受可变数目的形参。例如我们都非常熟悉的printf,scanf等等。2:变长参数如何实现?首先来看下面这样一个例子:#include#include#includevoid demo(char *msg,...){ va_list argp; int arg_number=0;转载 2013-04-24 23:41:48 · 949 阅读 · 0 评论 -
Floyd算法的证明
Floyd算法的证明Floyd算法求每个点间的最短路径:void floyd(){for(k=0;k for(i=0;i for(j=0;j A[i][j]=min(A[i][j],A[i][k]+A[k][j]);}设有n的结点,Ak(i,j)为从i到j但不经过索引大于k的结点的最短路径长度.转载 2013-04-24 23:27:49 · 2736 阅读 · 0 评论 -
C,DennisRitchie的不朽遗产
摘要:C语言是Dennis在70年代早期创建的,是他和Ken Thompson在开发Unix操作系统时的一部分工作成果。当C编译器可用之后,C就迅速地成为Unix上开发软件的首选语言。今天,我们聚集于此,悼念Dennis Ritchie,缅怀他在软件方面开创的深远贡献。几乎所有人都听说过“软件”一词,但只有少数人知道软件是什么,如何工作,世上有多少软件。在哥伦比亚大学的计算机科学入转载 2013-04-24 23:16:42 · 1744 阅读 · 0 评论 -
六之再续:KMP算法之总结篇(12.09修订,必懂KMP)
六之再续:KMP算法之总结篇(必懂KMP)作者:July。出处:http://blog.csdn.net/v_JULY_v/。引记 此前一天,一位MS的朋友邀我一起去与他讨论快速排序,红黑树,字典树,B树、后缀树,包括KMP算法,唯独在讲解KMP算法的时候,言语磕磕碰碰,我想,原因有二:1、博客内的东西不常回顾,忘了不少;2、便是我对K转载 2013-04-24 23:51:21 · 1293 阅读 · 0 评论 -
KMP算法深度解析
摘要:KMP算法是字符串匹配的经典算法,由于其O(m+n)的时间复杂度,至今仍被广泛应用。大道至简,KMP算法非常简洁,然而,其内部却蕴含着玄妙的理论,以至许多人知其然而不知其所以然。本文旨在解开KMP算法的内部玄妙所在,希望能够有助于学习与理解。 1、KMP算法 一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此称之为转载 2013-04-24 23:45:48 · 1041 阅读 · 0 评论 -
KMP算法详解
相信很多人(包括自己)初识KMP算法的时候始终是丈二和尚摸不着头脑,要么完全不知所云,要么看不懂书上的解释,要么自己觉得好像心里了解KMP算法的意思,却说不出个究竟,所谓知其然不知其所以然是也。 经过七八个小时地仔细研究,终于感觉自己能说出其所以然了,又觉得数据结构书上写得过于简洁,不易于初学者接受,于是决定把自己的理解拿出来与大家分享,希望能抛砖引玉,这便是Bill写这篇文章想要转载 2013-04-24 23:43:51 · 877 阅读 · 0 评论 -
算法时间复杂度的计算 [整理]
基本的计算步骤 时间复杂度的定义 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度(O是数量级的符号 ),简称时间复杂度。根据定义,可以归纳转载 2013-04-24 23:39:25 · 1408 阅读 · 0 评论 -
求二叉树中任意两结点的最近共同祖先的算法及其证明
一、问题描述 已知一个二叉树T,以及该二叉树中的某两个结点A和B。求:结点A和B的最近共同祖先。二、算法描述先序遍历二叉树T,得到其先序序列Seqpre。不失一般性地,设:Seqpre= (θ1,θ2,…, θa,A, …, B, …, θN); (式1)后序遍历二叉树T,得到其后序序列Seqpost。不失一般性地,设:Seqpost= (λ1转载 2013-04-24 23:36:56 · 4749 阅读 · 1 评论 -
C语言中malloc函数返回值是否需要类型强制转换问题
经常看到有人说C语言中malloc函数的返回值不要用强制类型转换. 最近看到了这个帖子http://stackoverflow.com/questions/7545365/why-does-this-code-segfault-on-64-bit-architecture-but-work-fine-on-32-bit, 终于是懂原因了. 做个总结如下: 1. 在C语言中, 如果调原创 2013-05-09 10:21:40 · 4432 阅读 · 0 评论 -
VS2010 安装 Boost 库 1.54
Boost库被称为C++准标准库, 功能很是强大, 下面记录我在VS2010中安装使用Boost库的过程.首先上官网http://www.boost.org/下载最新的Boost库, 我的版本是1_54_0版本, 解压下载的文件到任一文件夹, 我放D盘boost目录下. 之后开始-运行-cmd打开dos窗口, 进入到boost库根目录下, 使用如下命令cd D:\boost\boost原创 2013-07-18 12:05:33 · 8950 阅读 · 7 评论 -
C++经典书籍推荐
以前有不少朋友问关于学习各种技术的推荐书籍的问题,这里把我觉得比较好的一些书籍列一下,希望能起到抛砖引玉的作用就好了:)C++C++ Primer,Thinking in C++,The Standard C++ Library,The C++ Programming Language:这几本书就不多介绍了,很有名的书,我就不罗嗦了Effective C++和More Ef转载 2013-07-17 23:55:24 · 1592 阅读 · 0 评论 -
C++ 输入类型不匹配检测方法
今天看C++ primer plus一书,看到C++中检测输入类型不匹配的检测方法。输入类型不匹配是指输入的数据类型与所期望的类型不匹配,如 int n; cin >> n; 但输入的数据为字符串时,这种情况就是输入类型不匹配。那么当出现这种情况时,变量n的值有没有改变呢,又该如何检测这种情况呢?首先变量n的值并没有改变。不匹配的字符串仍留在输入缓冲区中。c原创 2013-07-16 10:59:55 · 2998 阅读 · 0 评论