自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Justme0的专栏,新个人主页 justme0.com

绘画美 建筑美 编程美

  • 博客(80)
  • 资源 (8)
  • 收藏
  • 关注

原创 函数式编程与 C++

这个学期学了一门函数式语言 Coq,是法国人发明的,它与 ML 很像,其实 Coq 的发明主要是受了 ML 的影响。Coq 的语法我就不在这叙述了,有兴趣的朋友可以看这本书 Software Foundations,也就是我们上课用的教材。下面直接看些例子吧。1. map它的功能与 C++ 中的std::transform算法类似,是将f作用在list中的每个元素(元素类型是X)上,返回一个list

2015-04-22 12:34:32 3393 1

原创 C/C++ 中生成特定范围内的随机数

大家在写 C/C++ 程序时,难免会遇到要求获取某个范围内的随机数,我查阅了一些资料后,总结如下。本文分两部分,先介绍 C 语言中与随机数相关的两个函数 srand 和 rand,后介绍 C++ 中的 random 库,每一部分最后会给出生成特定范围内的随机数模板供参考。1 C 语言中的 srand 和 rand1.1 实现下面是 VC 的实现,GCC 的实现比 VC

2014-11-27 16:04:02 27104 1

原创 C++ 中的 Lambda 表达式

前些天买了本《程序设计语言理论》,看了简介,Lambda 演算贯穿整个理论,尤其在函数式语言中具有重要作用。C++11 中也加入了 Lambda 表达式,下面做个总结。1、一个简单的 Lambda 表达式如下:[] {}这就定义了一个对象,这个对象匿名,记住,Lambda 表达式是对象,不是类型,这很重要!本例中,该对象的类型是 'anonymous-namespace'::<lambda0>,这是编译器给它设的一个类型名。

2014-05-08 16:52:36 2559

原创 【算法】第 n 小数 nth_element

STL 中取第 n 小数的算法 nth_element 的函数原型如下template<class RandomAccessIterator>void nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last);算法说明:1、功能:执行 nth_element 后,nth 所指位置的元素将是整个区间有序时在该处的元素。对 [first, nth) 中的任意迭代器 i 和 [n

2014-04-30 16:48:02 3213

原创 【算法】中位数 median

median 是 STL 内部的算法,用于求三个数的中位数,它将用于 std::sort, std::nth_element 的实现中,快速排序和求第 k 小数算法都用到了划分,选取 pivot 时为“三者取中”,即 *first, *(first + (last - first) / 2), *(last - 1) 三者的中位数,这两个算法后面会介绍。median 的源码如下:templ

2014-04-26 22:23:39 6968

原创 【算法】划分 partition

STL 中的划分算法 partition 的函数原型如下template ForwardIterator partition(ForwardIterator first, ForwardIterator last, Predicate pred);四点说明:1、作用:将 [first, last) 中所有满足 pred 的元素置于不满足 pred 的元素前面。2、返回值:设返回的迭代

2014-04-25 21:44:52 6844

原创 【算法】插入排序 insertion_sort

准备写个《STL 源码剖析》的读书笔记,开个专栏,名为《STL 的实现》,将源码整理一遍。很喜欢侯捷先生写在封底的八个字:天下大事,必作于细!他在书中写到:我开玩笑地对朋友说,这本书出版,给大学课程中的「数据结构」和「算法」两门授课老师出了个难题。几乎所有可能的作业题目(复杂度证明题除外),本书都有了详尽的解答。然而,如果学生能够从庞大的SGISTL源码中干净抽出某一部份,加上自己的包装,做为呈堂作业,也足以证明你有资格获得学分和高分。事实上,追踪一流作品并于其中吸取养份,远比自己关起门来写个三流作品,价

2014-04-22 17:20:19 3278 1

原创 用有限自动机实现正则表达式的匹配

问题:在主串中查找是否存在正则表达式为 abc*d?e 的匹配,下面用有限自动机的方法查找,该正则表达式的最简 DFA 如下状态转换表如下图所示程序中用二维数组定义如下#define STATES_NUMBER 5#define LETTER_NUMBER 5// 表示 abc*d?e 的最简 DFA 的状态转换表(-1表示不接受)int trans_table[STA

2014-03-08 18:33:12 8202

原创 C 语言中模拟“泛型”

一般在写 C 程序时用 typedef 将容器中元素的类型抽象,无法在同一个程序中用到两种类型,而本文试图在一个程序中用到两种不同类型的容器,比如实现类似于 C++ 中的 vector 和 vector。核心技术是将元素类型定义为 void *,管它什么类型,都用 void * 类型的指针指向真正的数据,与此同时,类型的大小是个重要信息,比如一般地,char 为1个字节,double 为4个字节。

2014-02-07 22:44:15 3720

原创 求二叉树的带权路径长度(深搜或广搜)

考研昨天结束了,专业课我考得不好,是408,算法题13分。今年是求二叉树的带权路径长度,我就写了算法思想,代码空白,因为时间来不及了,慌了,是心态的问题吧,做到最后有种天要塌下来的感觉,回来后很沮丧,因为我觉得自己是可以写出程序的,不服啊! 下面说说这道题目。树的带权路径长度(Weighted Path Length)定义:树中所有叶子的带权路径长度之和。比如下面这棵树,WPL就是3*

2014-01-06 17:28:56 7877 3

原创 上机实现操作系统课程中的 PV 操作

各位上过《操作系统》的同学都知道进程同步这个知识点,汤小丹那本“考研指定教材”上面描述 PV 操作是用 Pascal 语言的,看着真心难受,各种题目也是要求我们纸上写程序,本人真心反感,写了都不知道对不对。下面这个程序是在 Windows 下用 C 语言写的,选的例子是经典的“生产者消费者问题”,希望对大家有所帮助。“生产者消费者问题”的程序如下,假设有多个缓冲区,多个生产者,多个消费者。它们

2013-11-06 17:27:21 2168

原创 用二级指针操作不带头结点的单链表

在不带头结点的单链表中删除特定元素,一种很麻烦的情况是首结点即要删的结点,所以往往标识一个链表的 head 就会改变,而在删除函数中要改变客户端的 head,就必须传入 head 的地址,否则客户端的 head 永远不会改变,也就是说,若形参为 Node * 类型,修改的只是 head 的副本,这是C语言中的基础问题。这篇博客是我读了皓哥的这篇文章《Linus:利用二级指针删除单向链表》有感而写的

2013-10-06 00:56:32 3303 8

翻译 用 C++ 标准模板库(STL)的 vector 实现二叉搜索树(BST)

本文由 Justme0 翻译自 Code Project 转载请参见文章末尾处的要求。介绍众所周知,要建一棵树,我们需要关注它的内存分配与释放。为了避开这个问题,我打算用C++ STL(vector和deque)来建一棵小型的BST。很明显,这篇文章是出于这个想法的。 背景BST是应用最广泛的数据结构之一。C是首选语言,不过因为C++尤其是C++11的出现,我更有兴

2013-09-05 17:31:07 7161 2

原创 C 语言中实现数据与方法的封装

在 C 语言中可以用结构体代替类,用函数指针代替成员方法,实现数据成员与成员方法的封装,在客户端程序中写出的程序与 C++ 类似,唯一的不同是 C 语言中调用函数指针成员时必须将本对象的地址传给函数,因为 C 语言中各函数的地位是相同的。       本文以模仿 STL 中的 vector 类写了一个 C 语言的 vector 结构体,程序如下:1. vector 的接口/******

2013-08-19 00:25:58 3468

原创 第一次面试

下午课刚上完,我收到了HR的通知,得知没有通过面试,这是一家在合肥的软件公司。挺不爽的,我觉得主要是因为经验少。还是谈谈面试官问我的两个技术问题吧,我应聘的是C++软件开发工程师。1、STL中的map是线程安全的吗?我的回答:标准中没有规定,但是基本上STL都实现了,是线程安全的。其实是大部分版本的STL都不是线程安全的。我前几天刚好查了这个问题,参见:http://sta

2013-05-24 17:46:48 2795 7

原创 USACO 1.2.2 Transformations(模拟)

分析       这是我第一次在ACM的题目中用OO的思想写的程序,看到标程,竟不谋而合,结构是类似的。对正方形这个类分析,将会使问题变得简单,我觉得OO的分析和设计挺关键的,其实我一开始也没设计好,原先准备把7个bool函数当成类的成员方法,其实这个设计是不好的,有点过了。其实应该是把旋转90度和轴对称这两个方法作为类的成员方法,这样main中调用就方便自如了。       最后,我觉得

2013-03-30 13:14:08 1654 1

原创 POJ 1151 Atlantis(离散化+扫描线)

题目大意:求N个矩形的并的总面积。http://poj.org/problem?id=1151参考了黑书上讲离散化的那两页,想到了上学期学的计算机图形学里的多边形填充算法。src:/******************************************************************** created: 2013/03/28 created:

2013-03-28 11:59:05 1570

原创 USACO 1.1.4 Broken Necklace(模拟)

做这题做了一个下午,都快崩溃了。说下要点:1、要注意'w'这种特殊情况,到某位置时,注意左边、右边是'w'的情况。2、得把整个项链看出循环队列,所以指针移动时注意mod。3、我用的还是暴力法,O(n^2),看解题报告有O(n)的算法,用的是DP,还有待研究。源程序#define _CRT_SECURE_NO_WARNINGS#include #include

2013-03-24 00:18:36 1713

原创 完美二叉树(perfect)与正则二叉树(strict)的概念

“满二叉树(full)”的定义在国内和国外完全不同,国内指“完美二叉树(perfect)”,国外指“正则二叉树(strict)”,所以我建议国内外都取消“满二叉树(full)”这个叫法,这样就没有不必要的麻烦了。总结如下:参考资料:http://www.stackpop.org/html/366_cn_us_difference_ds.htmlhttp://st

2013-02-25 10:36:28 7376

原创 读《STL源码剖析》有感

一个月之前的今天是我的生日,一位关系不错的同学送了我本《STL源码剖析》,还有位送了我本《C和指针》,我就看起来了,这些天都在考试,就经常晚上11点半过后拿个手电筒看,我特别认可一句话:“兴趣是最好的老师。”         《C和指针》里面的内容很细,我就先看了《STL源码剖析》。第一次正式看一个上午看了40多页,自己都吃惊了。前言中孟岩的序写得不错,文笔好。第一章侯先生介绍了STL的历史,

2013-01-21 19:16:51 2004

原创 旋转字符串(循环移位,rotate)

旋转字符串是个经典问题。要求:时间复杂度O(n),空间复杂度O(1)。接口描述:http://www.sgi.com/tech/stl/rotate.html《编程珠玑》、《编程之美》上都有这个问题,关于左旋右旋整个旋的方法我就不说了。我的想法是,先左右比较,长的一段的大部分移到另一端,再递归进行余下的。比如: char str1[] = "abcdefghijkl

2013-01-14 18:11:00 2287

原创 数组传参的三种方法:泛型;压扁数组;数组结构

数组传参很常见,在C/C++中传递数组时,数组名会退化为指针,所以一般都要给出首地址和长度。这是有缺陷的,当我们在写函数时不知道各维大小时该怎么办呢?下面用矩阵乘法作为例子,给出三种实现方法:GP, flattening the array, struct其中我认为flattening the array 这种方法最好,OpenGL中的glMaplf 函数用的正是这种方法,它的函数原型如下

2013-01-10 17:34:09 2411

原创 模拟处理机调度

一、先来先服务#define _CRT_SECURE_NO_WARNINGS#include #include #include #include using namespace std;unsigned int sysTime = 0; // 模拟系统的时钟,每运行一次就加1enum Status {Ready, Complete}; // 就绪态Ready,完成

2013-01-08 18:30:50 1342

原创 模拟虚存管理

1、页表的数据结构页号标志主存块号修改位外存地址struct PageItem { unsigned pageID; // 作业的页号 unsigned outMAddr; // 该页在外存上的地址 bool state;

2013-01-08 18:12:49 2137

原创 考研结束了

考研结束了,下一届就轮到我们了,今天还跟同学聊了考研的事,我对考研政治不感冒,为什么要叫我们学政治?为什么要把这种信仰强加给我们?而那些申请国外研究生的同学就不用学了,凭什么?这真的很矛盾。我以后想搞技术。看了王道论坛上大家发的那些计算机试题,我觉得找工作的同学也应该准备,到公司里同样也可以研究数据结构和算法,不必总是沉浸在考研试题上,公司也是很强大的,更活!英语,我现在用到英语的地方就是喜欢用英

2013-01-06 20:29:50 3027

原创 初尝“元编程”(C++描述)

先看两个计算斐波拉契数的程序:(1)运行时#include using namespace std;const int N = 45;int Fib(unsigned n){ if (0 == n) return 0; if (1 == n) return 1; return Fib(n - 1) + Fib(n - 2);}int main(int argc, c

2013-01-02 22:40:56 1545 1

原创 CG实验2nd&3rd:二维几何变换、裁减、动画、三维透视

实验21、放缩与旋转说明:关键得到变换矩阵,放缩矩阵: doubleb[3][3] = { Sx,0, 0, 0,Sy, 0, -xF* Sx + xF, -yF * Sy + yF, 1 };旋转矩阵:

2013-01-01 12:48:24 2148 1

原创 CG实验4th:Bezier曲线

根据Bezier曲线的定义,画出曲线上密密麻麻的点即可。运行结果:源程序:/*** Justme0* 绘制Bezier曲线**/#define _CRT_SECURE_NO_WARNINGS#include #include #include #include "graphics.h"using namespace std;// 生成的Be

2012-12-25 19:25:47 1511

原创 CG实验4th:消隐

消隐采用的是深度排序算法(油画家算法)运行结果:源程序:#define _CRT_SECURE_NO_WARNINGS#include #include #include "graphics.h"using namespace std;struct MyRectangle { double x0; double y0; double x1; do

2012-12-25 18:43:12 1169

原创 微软Metro风格颜色值

觉得微软新一代的产品logo颜色很新颖。比如这个页面就很有特色:http://windows.microsoft.com/zh-CN/windows/home下面这些值都是我用拾色器取的,找了一些主要的,希望对做设计的朋友有帮助。微软logo红Hex={F6,53,14}绿Hex={7C,BB,00}蓝Hex={00,A1,F1}黄Hex={FF,BB,00}

2012-12-22 23:42:27 5126

原创 内存的连续分配与回收算法

几点说明:部分代码参考《数据结构》教材。1、采用空闲分区链链接空闲分区,用循环首次适应算法分配内存。 2、假定内存块的大小、地址以“字”为单位计。空闲区、作业区边界采用标识。“字”的数据结构如下:leftLinktagsizerightLink空闲空间upLink

2012-12-01 13:47:51 3865 2

原创 做网站有感

这四个星期在做课程设计,内容就是B/S模式的网站,繁!之前不知道HTML、CSS、JavaScript之类的,只泛泛地自学了C#,借了本ASP.NET看,我一直认为这些是快餐式的知识,因为微软高度封装了它,如张小牛所说,“想会就会”。不像数据结构、计算机组成原理、操作系统、网络原理这些考研课!一个人搞,经常是一边前台HTML,一边后台C#,一边数据库SQL。话不多说了,对网站中用到的一些方法和技巧

2012-11-24 00:54:21 1359

原创 auto_ptr类的源码注解

源码及注释如下,这比记忆语法好多了!个人认为,auto_ptr类设计地不行,比如都不能作为参数传递(传递后实参就没用了),失去了C指针的经典优势!// auto_ptr类的简化版,删除了有关auto_ptr_ref及auto_ptr的一些成员函数templateclass auto_ptr{public: typedef auto_ptr ClassType; explicit

2012-10-21 21:08:05 1236

原创 定点小数补码一位乘(Booth比较法)

程序:// 定点小数补码一位乘(Booth比较法)// http://blog.csdn.net/justme0#define _CRT_SECURE_NO_WARNINGS#include #include #include using namespace std;const int n = 4; // 数值位位数// a,b联合右移(算术移位)void RightM

2012-10-18 11:34:28 4962

原创 定点小数补码一位乘(校正法)

程序:// 定点小数补码一位乘(校正法)// http://blog.csdn.net/justme0#define _CRT_SECURE_NO_WARNINGS#include #include #include using namespace std;const int n = 4; // 数值位位数// a,b联合右移(算术移位)void

2012-10-17 22:37:39 6532

原创 定点小数原码一位乘(C++实现)

这学期在学计组,这里将用C++实现各种运算方法,其实那些算法应该是用电路硬件实现的,用高级语言来描述一遍也挺有意义。说明:输入输出的小数均以机器数表示,数值位为4位。#define _CRT_SECURE_NO_WARNINGS#include #include #include using namespace std;void RightMove(bitset &

2012-10-16 23:03:36 6059 1

原创 重载下标运算符[]

看了bitset的源码,发现要重载下标运算符[]内容还挺多的,作右值时相对简单,只用来测试。作左值时就比较麻烦,因为要修改它的值。 1、作右值举个例子:const bitset b;bool tag;tag = b.test(2);tag = b[2];上面第三句和第四句效果一样,都是测试b的下标为2的位是否为1。当bitset为const时,operato

2012-10-14 16:09:49 5022

原创 【库函数源码剖析系列】(6) strchr

strchr:// strchr#include char *Strchr(const char *s, int c){ for (; *s != (char)c; ++s) { if (*s == '\0') { return NULL; } } return (char *)s;}int main( int argc, ch

2012-09-29 00:53:05 2213

原创 【库函数源码剖析系列】(5) strcat

strcat:// strcat#include #include char *Strcat(char *dest, const char *src){ char *tmp = dest; while ('\0' != *dest) { dest++; } while ('\0' != (*dest++ = *src++)) { ; } return tm

2012-09-28 00:50:28 1494

原创 【库函数源码剖析系列】(4) strlen

strlen:// strlen#include size_t Strlen(const char *s){ const char *p = NULL; for (p = s; *p != '\0'; ++p) ; return p - s;}int main(int argc, char **argv){ char buffe

2012-09-25 19:59:42 1449 1

LLVM Cookbook

这本书是讲LLVM的,LLVM是个编译器后端,搞这块的朋友应该不陌生吧,而网上关于LLVM各个类的用法资料较少,基本靠代码注释生成的doxygen,这个pdf是文字版(非扫描版)。

2015-08-10

内存分配算法(含伙伴系统)

内含伙伴系统、最坏、最佳三种分配方式的演示,有内存分配动态变化图。

2014-01-11

具体数学(Knuth著)

是Knuth写的关于数学的经典书籍,是对计算机专业学生的数学要求。

2012-08-10

《人月神话》 软件人员必读

《人月神话》提出了2条著名的法则: 1、人月神话:向一个已经延后的 《人月神话》项目中投入更多的人力资源只会让它更延后。 2、没有银弹:没有一种策略,技术或者技巧可以极大地提高程序员的生产力。

2011-06-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除