关闭

函数式编程与 C++

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

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

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

C++ 中的 Lambda 表达式

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

【算法】第 n 小数 nth_element

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

【算法】中位数 median

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

【算法】划分 partition

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

【算法】插入排序 insertion_sort

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

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

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

C 语言中模拟“泛型”

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

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

考研昨天结束了,专业课我考得不好,是408,算法题13分。今年是求二叉树的带权路径长度,我就写了算法思想,代码空白,因为时间来不及了,慌了,是心态的问题吧,做到最后有种天要塌下来的感觉,回来后很沮丧,因为我觉得自己是可以写出程序的,不服啊!  下面说说这道题目。树的带权路径长度(Weighted Path Length)定义:树中所有叶子的带权路径长度之和。比如下面这棵树,WPL就是3*...
阅读(2605) 评论(0)
81条 共9页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:288969次
    • 积分:3698
    • 等级:
    • 排名:第9717名
    • 原创:80篇
    • 转载:0篇
    • 译文:1篇
    • 评论:163条
    My New Blog Site
    最新评论