Source Code
静革 justme0.com
这个作者很懒,什么都没留下…
展开
-
【库函数源码剖析系列】(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 · 1497 阅读 · 0 评论 -
C/C++ 中生成特定范围内的随机数
大家在写 C/C++ 程序时,难免会遇到要求获取某个范围内的随机数,我查阅了一些资料后,总结如下。本文分两部分,先介绍 C 语言中与随机数相关的两个函数 srand 和 rand,后介绍 C++ 中的 random 库,每一部分最后会给出生成特定范围内的随机数模板供参考。1 C 语言中的 srand 和 rand1.1 实现下面是 VC 的实现,GCC 的实现比 VC原创 2014-11-27 16:04:02 · 27112 阅读 · 1 评论 -
【库函数源码剖析系列】(1) strcpy
前言:学C语言的时候,我就想把C语言的库函数的函数体找出来,如果知道了函数的定义(*.h里只是一个函数原型),那么老谭那本书上有的语法就不用讲了,自己还能深入理解!于是,我准备开这个系列,把自己搜集的库函数定义记下来,唯一的要求是与微软实现的库函数功能一致,无任何bug。每篇之后,如果自己有什么看法会写在后面,各位有何高见也欢迎评论。我发现,源码中的函数体里大多只需用三个东西:指针,if语句,wh原创 2012-09-24 01:48:01 · 2351 阅读 · 8 评论 -
【算法】中位数 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 · 6971 阅读 · 0 评论 -
【算法】划分 partition
STL 中的划分算法 partition 的函数原型如下template ForwardIterator partition(ForwardIterator first, ForwardIterator last, Predicate pred);四点说明:1、作用:将 [first, last) 中所有满足 pred 的元素置于不满足 pred 的元素前面。2、返回值:设返回的迭代原创 2014-04-25 21:44:52 · 6847 阅读 · 0 评论 -
【算法】第 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 阅读 · 0 评论 -
【算法】插入排序 insertion_sort
准备写个《STL 源码剖析》的读书笔记,开个专栏,名为《STL 的实现》,将源码整理一遍。很喜欢侯捷先生写在封底的八个字:天下大事,必作于细!他在书中写到:我开玩笑地对朋友说,这本书出版,给大学课程中的「数据结构」和「算法」两门授课老师出了个难题。几乎所有可能的作业题目(复杂度证明题除外),本书都有了详尽的解答。然而,如果学生能够从庞大的SGISTL源码中干净抽出某一部份,加上自己的包装,做为呈堂作业,也足以证明你有资格获得学分和高分。事实上,追踪一流作品并于其中吸取养份,远比自己关起门来写个三流作品,价原创 2014-04-22 17:20:19 · 3281 阅读 · 1 评论 -
【库函数源码剖析系列】(2) strcmp
strcmp:// strcmp#include #include int Strcmp(const char *src, const char *dest){ int ret = 0 ; while( 0 == (ret = *(unsigned char *)src - *(unsigned char *)dest) && '\0' != *dest原创 2012-09-24 12:59:37 · 1685 阅读 · 2 评论 -
【库函数源码剖析系列】(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 · 1454 阅读 · 1 评论 -
【库函数源码剖析系列】(3) strstr
strstr:// strstr#include char *Strstr(const char *strLong, const char *strShort){ char *cp = (char *)strLong; // cp是当前strShort的头在strLong中的位置 char *pL = NULL; char *pS = NULL; if ('\0' == *原创 2012-09-24 22:24:35 · 3136 阅读 · 0 评论 -
【库函数源码剖析系列】(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 · 2215 阅读 · 0 评论 -
函数式编程与 C++
这个学期学了一门函数式语言 Coq,是法国人发明的,它与 ML 很像,其实 Coq 的发明主要是受了 ML 的影响。Coq 的语法我就不在这叙述了,有兴趣的朋友可以看这本书 Software Foundations,也就是我们上课用的教材。下面直接看些例子吧。1. map它的功能与 C++ 中的std::transform算法类似,是将f作用在list中的每个元素(元素类型是X)上,返回一个list原创 2015-04-22 12:34:32 · 3397 阅读 · 1 评论