10 2012 档案

摘要:在看一些C++的文章的时候,经常会看到关于delete与free的区别,delete不需要检查指针是否为NULL。如下面一篇文章http://www.cnblogs.com/zhuyp1015/archive/2012/07/20/2601698.html。但是有时候,又会看到由于delete引起的double free or corruption,我们可以写一个很简单的程序,来测试delete会不会引起double free。#include <iostream>using namespace std;#ifndef NULL#define NULL 0#endifclass A 阅读全文
posted @ 2012-10-29 21:51 Frandy.CH 阅读(1575) 评论(2) 推荐(0) 编辑
摘要:在OpenCV中,矩阵是一个基础的数据结构,在CvCore中。在较早版本里面,使用的是C语言实现的struct,较新的版本里面有C++实现的class。下面分别介绍一下这两种使用方法。CvMat参考http://www.opencv.org.cn/index.php/Cxcore%E5%9F%BA%E7%A1%80%E7%BB%93%E6%9E%84在OpenCV的中文首页上,文档里面给的还是C实现的结构体。如下,typedef struct CvMat { int type; /* CvMat 标识 (CV_MAT_MAGIC_VAL), 元素类型和标记 */ int step; /* .. 阅读全文
posted @ 2012-10-28 18:15 Frandy.CH 阅读(5009) 评论(0) 推荐(0) 编辑
摘要:一直想试试这个LLVM的,据说错误提示信息比GCC好,C++11支持的也更多。今天编译的时候,发现用了几个C++11特性了,gcc4.4没法编译,于是想,那就尝试一下LLVM吧。既然是想安装比较新的版本的LLVM,新立得软件包上的肯定不是好的选择。想用预编译好的.deb包,却发现不支持ubuntu10.04,好像11.10之后的是可以用deb包的。那就源代码编译吧,这应该总是可以的。目的,LLVM和Clang,编译C/C++,环境Ubuntu10.04,X86,gcc4.4.先搞清楚要准备哪些东西,在http://llvm.org/docs/GettingStarted.html#gettin 阅读全文
posted @ 2012-10-20 20:56 Frandy.CH 阅读(16390) 评论(3) 推荐(1) 编辑
摘要:之前纠结enum class,其中一个问题就是,要输出type的名字,方便调试。今天尝试了一下输出重载,没想到竟然可以。测试如下,#include <iostream>using namespace std;enum class Type{ TEXT, _EOF};ostream& operator << (ostream& out,Type tp){ switch(tp) { case Type::TEXT: out << " TEXT ";break; case Type::_EOF: ... 阅读全文
posted @ 2012-10-13 13:31 Frandy.CH 阅读(719) 评论(2) 推荐(0) 编辑
摘要:之前实现的枚举类enum class虽然达到了当时期望的功能,但现在在用的时候出现了一些问题。比如新定义了一个Token的类,定义如下,class Token{public: Token(){} Token(int tp, string tx) { type = tp; text = tx; } int Type() const { return type; } string Text() const { return text; } friend ostream& operator << ... 阅读全文
posted @ 2012-10-08 18:29 Frandy.CH 阅读(751) 评论(2) 推荐(0) 编辑
摘要:虽然写过一些C++程序,有类有继承,但对虚函数和多态用的不多,最近想尝试一下多态,却出了些问题。于是不得不重新来学习虚函数与多态。简单的示例程序如下,class Lexer{public: Lexer(){} Lexer(string t){ name = "Lexer"; text = t; } virtual void Print(){ cout << name << ":" << text << endl; }protected: string name; string text;};class Ex 阅读全文
posted @ 2012-10-08 14:38 Frandy.CH 阅读(259) 评论(0) 推荐(0) 编辑
摘要:在实现lexer和parser的过程中,要定义token的类型。《编程语言实现模式》中使用的是java代码,直接定义static int TEXT = 1;并且可以在lexer扩展的时候继承到实际使用的lexer里面。但C++定义类的static成员时,必须在外面单独的进行初始化,对这一点不是很爽,在C++11中,实现了enum class,先看看这个enum class能不能满足要求,例如enum class TokenType{ _EOF, TEXT};TokenType a = TokenType::TEXT;那么就可以方便地使用TokenType::TEXT指代类型,只有同... 阅读全文
posted @ 2012-10-07 12:31 Frandy.CH 阅读(4964) 评论(2) 推荐(0) 编辑
摘要:以前尝试阅读《编译原理》,但都没有读下来,现在看《编程语言实现模式》,感觉轻松多了。其实,目前我只对解析感兴趣,只要看这本书的第一部分解析起步就可以了,确实没有必要去啃《编译原理》。下面就是学习的内容了。解析,分为两步,先是进行词发分析,将输入转换成一个一个的Token,然后是进行语法分析。一个一个的Token组成语句,对应一定的语法。根据这些Toke,匹配一定的语法。词法分析器,lexer,是语法分析器,parser,的基础。先来看看词发分析器。例如语句,1024+ 78*pi,一个简单的表达式,词发分析就是要得出上面的语句由这些Token组成,1024, + , 78, * ,pi。Tok 阅读全文
posted @ 2012-10-06 17:57 Frandy.CH 阅读(1709) 评论(0) 推荐(0) 编辑
摘要:开始看《编程语言实现模式》,补习了一下Parser的基础知识。英文是Wiki上的,中文是自己理解翻译的。Wiki LALR parserhttp://en.wikipedia.org/wiki/LALR_parserin 1965, Donald Knuth invented the LR parser (Left to Right, Rightmost derivation). The LR parser can recognize any deterministic context-free language in linear-bounded time. However, rightmo 阅读全文
posted @ 2012-10-05 16:17 Frandy.CH 阅读(2432) 评论(0) 推荐(0) 编辑
摘要:最开始使用Matplotlib,一是因为它不需要像Matlab一样花很长时间启动一个图形界面,二是它可以直接保存为.eps格式。在图像显示出来之后,在左下角有几个按钮,最后一个就是保存,在保存的对话框选择.eps格式即可。另一种方式就是在程序里面使用pyplot.savefig(name,format="eps"),可以用format指定格式为eps,也可以不使用format,而是写在name里面,它会自动从name里面找到扩展名来决定格式。虽然这样得到了.eps格式的图像,但是它的周围有空白的地方,有两种方法来去掉这些空白,一种方法是使用gsview,在windows上, 阅读全文
posted @ 2012-10-02 13:31 Frandy.CH 阅读(15986) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示