随机数发生器
核心函数是cstdlib中的rand(),它生成一个闭区间[0,RAND_MAX]内的均匀随机整数(伪随机数)。
产生[0,n]间的整数:执行rand()后先除以RAND_MAX,得到[0,1]之间的随机实数,扩大n倍后四舍五入,对于普通的运用已可以满足要求。
一开始会执行一次srand(time(NULL)),目的是初始化“随机数种子”。不调用srand将在程序每次执行时得到同一套随机数。不需要在一个程序里多次调用。
随机程序实例:
void fill_random_int (vector<int>& v,int cnt)
{
v.clear();
for(int i=0;i<cnt;i++)
{
v.push_back(rand());
}
}
//注意srand函数是在主程序开始时调用,而非每次测试时。
//参数是vector<int>的引用,以避免不必要的值被复制。
//把vector作为参数或返回值时,应尽量改用引用方式传递参数。
//两个函数参数相同只是返回值不同,不可重载。
正式测试:
void test_sort(vector<int>& v)
{
sort(v.begin(),v.end());
for(int i=0;i<v.size()-1;i++)
{
assert(v[i]<=v[i+1]);
}
}
assert宏(测试时使用):
用法:“assert(表达式)”。
作用:表达式为真时无变化,为假时强行终止程序,并给出错误提示。
主程序:
int main()
{
vector<int> v;
fill_random_int(v,1000000);
test_sort(v);
return 0;
注:在一些对时间要求非常高的题目中,STL有时会成为性能瓶颈,需要注意
428

被折叠的 条评论
为什么被折叠?



