alogrithm

algorithm

1. max() min() abs()

max(x, y) min(x, y)分别返回x, y 中的最大值和最小值, 且参数必须是两个(可以是浮点数)
max(x, max(y, z)) 三个参数的最大值
abs(x)返回x的绝对值 x必须是整数 浮点数的绝对值用math头文件下的fabs

2. swap

交换 x 和 y 的值

3. reverse()

reverse(it1, it2)可以将数组指针在[it1, it2)之间的元素或容器的迭代器在范围内的元素进行反转

4. next_permutation()

next_permutation()给出一个序列在全排列中的下一个序列
在已经到达全排列的最后一个时会返回false,这样会方便退出循环 常用do while形式引其自身也需要输出

5. fill()

可以把数组或容器中的某一段区间赋为某个相同的值。和memset不同,这里的赋值可以是数组类型的对应范围中的任意值
fill(a, a + 5, 233)

6. sort()

sort(首元素地址(必填), 尾元素地址的下一个地址(必填), 比较函数(非必填));
默认从小到大的顺序排序
比较函数cmp来告诉sort何时要交换元素

bool cmp(int a, int b){
        return a > b;   //可以理解为当a > b时把a放在b前面
struct node{
    int x, y;
}ssd[10];
bool cmp(node a, node b){
    if(a.x != b.x) return a.x > b.x;
    else return a.y < b.y;
}

容器的排序 只有vector, string, deque是可以用sort的。 因为像set、map这种容器是使用红黑树实现的,元素本身有序

7. lower_bound()和upper_bound()

需要用在一个有序数组或容器中
lower_bound(first, last, val)用来寻找在数组或容器的[first, last)范围内的第一个值大于等于val的元素的位置
如果是数组,则返回该位置的指针;如果是容器,则返回该位置的迭代器
upper_bound(first, last, val)则是第一个值大于val的元素的位置
如果只是想获得欲查元素的下标,就可以不使用临时指针,而直接令返回值减去数组首地址即可

你可能感兴趣的:(alogrithm)