微信公众号网站开发模板,软件开发费和网站建设,永久免费linux服务器,购物网站seo搜索引擎前期分析前言 我们通常在写一个数据结构后#xff0c;需要去测试其正确性和性能比较#xff0c;那在平常手动输入数据的方式太鸡肋#xff0c;并且不具有普遍性和随机性。基于这个原因#xff0c;我们必须要掌握设置随机数#xff0c;不但可以给我们提供更多的数据#xff0c;还可…前言 我们通常在写一个数据结构后需要去测试其正确性和性能比较那在平常手动输入数据的方式太鸡肋并且不具有普遍性和随机性。基于这个原因我们必须要掌握设置随机数不但可以给我们提供更多的数据还可以让数据具有普遍意义满足我们的测试需求。 一、有关随机数的函数
1. srand
void srand (unsigned int seed);函数解析 seed就相当于一颗种子srand函数会种这个随机数种子种子对应一个随机数后面使用rand函数可以接收这个随机数。 经过测试当我们的种子是固定的每次程序运行时rand获得的随机数也是固定的无法做到在一个程序里获得真正意义的随机数所以参数通常使用的是time(NULL)time函数是获得系统的时间因为系统的时间一直在变那种子就也都是不同的所以每次程序运行时rand获得的数也一直在变这才是真正意义的随机数。 为什么参数一定时获得的随机数是固定的 首先计算机并不能产生真正的随机数而是将一些无规则排列的数字存储在电脑里再把这些数字划分为相等的N份并为每份加上一个编号。用srand()函数获取这个编号然后rand()就按顺序获取这些数字。 头文件
#include stdlib.h
参数seed 推荐使用time(NULL)用时间做参数可以保证每次程序运行时生成的随机数是随机的 time函数头文件#include time.h 返回值 无返回值 2. rand
int rand (void);
头文件
#include stdlib.h
函数解析 得到srand生成的随机数并返回这个随机数 返回值 返回的是随机数范围0RAND_MAXRAND_MAX 2147483647 二、测试模版 int main()
{const size_t N 10000;unordered_setint us; //容器1setint s; //容器2 vectorint v; //使用vector保存插入的数据v.reserve(N); //防止多次扩容造成消耗提前一次预留N个空间srand(time(nullptr)); //种随机数种子使用time做参数可以保证每次运行都是不一样的for (size_t i 0; i N; i){v.push_back(rand()); // N比较大时重复值比较多//v.push_back(rand()i); // 重复值相对少//v.push_back(i); // 没有重复有序}//测试容器插入的性能size_t begin1 clock();for (auto e : v){s.insert(e);}size_t end1 clock();cout set insert: end1 - begin1 endl;size_t begin2 clock();for (auto e : v){us.insert(e);}size_t end2 clock();cout unordered_set insert: end2 - begin2 endl;//测试容器查找的性能size_t begin3 clock();for (auto e : v){s.find(e);}size_t end3 clock();cout set find: end3 - begin3 endl;size_t begin4 clock();for (auto e : v){us.find(e);}size_t end4 clock();cout unordered_set find: end4 - begin4 endl endl;cout 插入数据个数 s.size() endl;cout 插入数据个数 us.size() endl endl;//测试容器删除的性能size_t begin5 clock();for (auto e : v){s.erase(e);}size_t end5 clock();cout set erase: end5 - begin5 endl;size_t begin6 clock();for (auto e : v){us.erase(e);}size_t end6 clock();cout unordered_set erase: end6 - begin6 endl endl;return 0;
}
三、反思与总结 由于目前能力不足还需要仔细研究源码中srand和rand的底层实现在未来某段时间会更新剖析源码实现random.c source code [glibc/stdlib/random.c] - Codebrowser