对C++库函数进行学习探索总结笔记

开发 后端
通过C++库函数rand()产生的数,说的好听点是“伪随机数”,其实根本不是随机数,更为丰富多彩的登录和个性化服务以及更好的数据访问和同步。

C++库函数作为一个高效的.NET程序语言。其混合了函数语言和物件导向程序编制语言,并且***的适用于编程、算法、技术和探索性开发,因此可以在使用的过程当中感受到趣味性和吸引力。

rand()产生“伪随机数”的原理是:给定数x(如果调用者未指定,则使用默认值),通过固定的计算公式1返回一个数y,这个数y就是所谓的伪随机数;同时通过固定的计算公式2,修改x,这样下次调用rand()时就会得到一个新的y。通过上面这两步,反复调用rand()会得到一个所谓的“伪随机数”的序列。

因为两个计算公式是固定的,所以只要X1相同,那么产生的序列就相同。X1成为种子,seed。
如果调用者不指定种子,C++语言的rand()会使用默认值。设置种子使用srand(unsigned int)函数,这个函数的名字的***个字母s就是seed的意思。

因为时间的唯一性和一维性,所以可以用系统时间来作为种子。这样可以保证每次运行时,rand()产生的序列都是不同的。在使用rand()前,以如下方式设置种子即可,
srand((unsigned int) time(0));

下面是《C Programming Language》中给出的rand()和srand()的一种实现,可能是早期C++的库函数的实现。

  1. int rand(void) {  
  2.   nextnext = next * 1103515245 + 12345;  //修改next的值  
  3.   return (unsigned int) (next/65536) % 32768;  //得到伪随机数在0~32768之间  
  4. }  
  5.  
  6. void srand(unsigned int seed) {  
  7.   next = seed;   //设置种子  

也就是说,随便你拿起哪本C++书籍(包括很多被人们广泛称为“必读经典”的),那么有很大的可能这本书中的内容不是你应该学的,而是你不应该学的。我之所以这么说有两个原因,因为一,我曾经是受害者。二,也是更实质性的原因,这些所谓的必读经典。

充斥的是介绍C++中的陷阱和对于C++库函数的缺陷的各种workarounds(好听一点叫Idioms(惯用法)或techniques(技术));又因为C++中的这类陷阱和缺陷实在数不胜数,所以就拉出了一个“长尾”;这类书籍在所有语言中都存在(“C缺陷和陷阱”、“Effective Java”、“Effective C#”等等)。#t#

然而在C++库函数里面这个尾巴特别长,导致这类书数不胜数。三,这些书中列出来的缺陷和陷阱根本不区分常见程度,对于一个用本程序员来说,应该希望看到“从最常见的问题到最不常见的问题”这样的顺序来罗列内容,然而这些书里面要么全部混在一起。

要么按照“资源管理、类设计、泛型”这样的技术分类来介绍内容,这根本毫无帮助(如果我看到一个章节的内容,我当然知道它讲的是类设计还是资源管理,还用废话么?),使得一个学习者无法辨别并将最重要的时间花在最常见的问题之上。

责任编辑:chenqingxiang 来源: qqread
相关推荐

2010-01-14 17:02:10

学习C++

2010-01-20 17:48:07

C++ 函数重载

2010-01-26 17:53:05

C++入门学习

2010-01-15 14:59:54

C++标准程序库

2010-01-22 15:53:55

C++转换

2010-01-13 14:35:10

Visual C++

2009-08-13 18:21:52

C#学习笔记

2010-01-28 14:04:35

C++链表

2010-01-13 18:47:53

C++教程

2022-08-05 13:38:08

C语言库函数printf()

2010-01-25 14:31:07

C++类

2011-04-19 17:36:12

C++

2011-04-19 17:44:02

C++

2010-01-21 18:00:59

C++语言

2010-01-18 10:53:26

2010-01-11 14:05:01

C++学习方法

2010-01-22 11:13:16

C++静态

2010-01-15 17:18:57

C++源程序

2022-12-16 15:20:19

RustC 语言

2010-01-27 16:52:31

C++语言学习
点赞
收藏

51CTO技术栈公众号