算法笔记-STL-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这种容器是使用红黑树实现的,元素本身有序

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

你可能感兴趣的:(算法笔记摘录)