上一页 1 2 3 4 5 6 ··· 9 下一页
摘要: 在C++中,标准库里面的容器,如vector,list都可以动态增长,如果把这些容器作为某个class的成员,那么这个class的内存是怎么分配的呢?写了一个简单的程序测试一下,如下,#include <string>#include <vector>#include <list>#include <iostream>using std::string;using std::vector;using std::list;using std::cout;using std::endl;class Elem{public: Elem(int i,st 阅读全文
posted @ 2012-11-07 22:15 Frandy.CH 阅读(714) 评论(0) 推荐(0) 编辑
摘要: 在OpenCV Maching Learning部分,实现了一些经典的机器学习算法,并且每个算法都有相应的例子,所以我觉得可以从这里开始学习机器学习算法。K-means算法应该是比较简单的机器学习算法,就先从这个开始学习。K-means 算法是很典型的基于距离的聚类算法 。从二维图像的例子来看,图像上有很多个点,为了将这些点按他们相近的距离分成一簇一簇的,假设要分成k簇,k-means算法步骤如下,a. 随机地选取k个点作为中心,b. 计算每个点到这些中心的距离,将这个点归属于离它最近的中心,这样就得到了k个簇。因为是随机选取的中心,会有一些点分配到错误的中心上。c. 根据得到的簇重新计算出它 阅读全文
posted @ 2012-11-03 19:12 Frandy.CH 阅读(559) 评论(0) 推荐(0) 编辑
摘要: 在看一些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 阅读(1549) 评论(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 阅读(4963) 评论(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 阅读(15560) 评论(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 阅读(711) 评论(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 阅读(739) 评论(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 阅读(256) 评论(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 阅读(4852) 评论(2) 推荐(0) 编辑
摘要: 以前尝试阅读《编译原理》,但都没有读下来,现在看《编程语言实现模式》,感觉轻松多了。其实,目前我只对解析感兴趣,只要看这本书的第一部分解析起步就可以了,确实没有必要去啃《编译原理》。下面就是学习的内容了。解析,分为两步,先是进行词发分析,将输入转换成一个一个的Token,然后是进行语法分析。一个一个的Token组成语句,对应一定的语法。根据这些Toke,匹配一定的语法。词法分析器,lexer,是语法分析器,parser,的基础。先来看看词发分析器。例如语句,1024+ 78*pi,一个简单的表达式,词发分析就是要得出上面的语句由这些Token组成,1024, + , 78, * ,pi。Tok 阅读全文
posted @ 2012-10-06 17:57 Frandy.CH 阅读(1665) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 9 下一页