有一些程序,虽然写起来不难,但是可能比较麻烦或容易出错,这时就可以用c++函数库里自带的一些实用的函数。
这里只记录一些不太常见的函数。
-------------------------------------!持续更新!-----------------------------------------------------
--------------------------------------正文分界线-------------------------------------------------------
1. __gcd(x, y)
求两个数的最大公约数,如__gcd(6, 8) 就返回2。在 algorithm 库中。是不是很方便?
2. reverse(a + 1, a + n + 1)
将数组中的元素反转。a 是数组名,n是长度,跟 sort 的用法一样。值得一提的是,对于字符型数组也同样适用。也在 algorithm 库中。
3. unique(a + 1, a + n + 1)
去重函数。跟sort的用法一样。不过他返回的值是最后一个数的地址,所以要得到新的数组长度应该这么写: _n = unique(a + 1, a + n + 1) - a - 1.
4.lower_bound(a + 1, a + n + 1, x); upper_bound(a + 1, a + n + 1, x)
lower_bound是查找数组中第一个大于等于x的数,返回该地址,同理也是 pos = lower_bound(a + 1, a + n + 1, x) - a
upper_bound是查找第一个大于x的数,用法和lower_bound一样
复杂度是二分的复杂度,O(logn)。(其实就是代替了手写二分)
5.printf("%.3f M ",(double)sizeof(a)/(1<<20));
这个其实不算函数,但是能输出数组占用了多少内存,不用手算了~(a是数组名)。
6.fill(a + 1, a + n + 1, x)
将数组a中的每一个元素都赋成x,跟memset的区别是,memset是一个字节一个字节赋值,fill是一个元素一个元素赋值!(省掉一层for……)