C++:标准库函数(sort、rand等)

来源:互联网 发布:矩阵uv分解 编辑:程序博客网 时间:2024/05/19 03:45

STL标准库里有许多诸如排序、生成随机数的函数,使用前包含头文件

 #include <algorithm>

排序:sort

这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,排序的区间是[a,b)。简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort(a,a+100)就行了,默认的排序方式是升序。
对vector对象排序:

sort(s.begin(),s.end());
  • 排序的数据类型不局限于整数,只要是定义了<运算的类型都可以,比如字符串类string。
  • 如果是没有定义<运算的数据类型,或者想改变排序的顺序,就要用到第三参数——比较函数。比较函数是一个自己定义的函数,返回值是bool型,它规定了什么样的关系才是“小于”。想把刚才的整数数组按降序排列,可以先定义一个比较函数cmp
bool cmp(int a,int b){//升序排列,如果改为return a>b,则为降序    return a<b;}

排序的时候就写sort(a,a+100,cmp);

  • 标准库的sort算法实现,采用快排的思想,平均的时间复杂度是 N(logN);算法中还提供了其他的集中排序函数 sort_heap() stable_sort(),时间复杂度都在 N(logN)。

生成随机数:rand、srand

rand函数的头文件在<stdlib.h>中,如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为2147483647。
如果想要生成某个范围内的随机数,可以

int r=rand()%n;

但rand函数生成的只是伪随机数,要想生成真正的随机数,还需要用srand函数进行初始化。
srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。

使用当前时钟作为随机数种子

srand( (int)time(0) );int r=rand()%n;
0 0
原创粉丝点击