C library

assert.h

  • 一般用来debug,或者通过二分来确定测试数据(一般为单组)
1
void assert(int expression);
  • 如果expression==0(false),程序跳出,返回RE

float.h

  • 定义了浮点数的一些特值
1
2
#define DBL_MAX (9.999999999999999e999)
#define DBL_MIN (1e-999)

limits.h

  • 定义了一些类型的特值
1
2
3
4
#define INT_MAX (2147483647)
#define INT_MIN (-2147483647)
#define LLONG_MAX (9223372036854775807)
#define LLONG_MIN (-9223372036854775807)

math.h

  • 数学库,定义一些常用数学函数,包括但不限于:

    • 三角函数
    • 双曲线函数
    • 指数与对数函数
    • 幂函数
    • 误差函数与伽马函数
    • 舍入函数
    • 比较函数
    • 绝对值
  • 详见

STL

set

1
2
set_union(a.begin(),a.end(),b.begin(),b.end(),c.begin());	//a,b并集到c
set_intersection(a.begin(),a.end(),b.begin(),b.end(),c.begin())) //交集

algorithm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
reverse(a.begin(),a.end());		//反转
rotate(a,a+x,a+n); //交换 [0,x) 和 [x,n)
replace_copy(a.begin(),a.end(),b.begin(),x,y); //将a中所有的x替换为y复制到b
next_permutation(a.begin(),a.end()); //返回下个排列
random_shuffle(a.begin(),a.end()); //打乱

//保证序列有序
lower_bound(a.begin(),a.end(),x); //返回第一个大于等于x的迭代器
upper_bound(a.begin(),a.end(),x); //返回第一个大于x的迭代器
equal_range(a.begin(),a.end(),x); //返回迭代器的pair,等于x的区间[it,it')
binary_search(a.begin,a.end(),x); //判断区间内是否有x存在,返回bool
merge(a.begin(),a.end(),b.begin(),b.end(),c.begin()); //a,b归并排序到c
nth_element(a,a+x,a+n); //使第x大元素位于x,比之小的元素位于其左边,大的位于右边(不保证有序)

//正确的释放内存方式,如vector
a.swap(vector<T>());