泛型算法



算法共性 (算法命名规则)


  1.  例如unique和sort
    unique(a.begin(),a.end()) 或者自己定义unique(a.begin(),a.end(),com)
    第一个通过自定义的 = 来判断
    第二个 通过com 来判断是否相等,
    sort 若不加comp函数, 则通过自定义的<来定义
  2. _if版本的算法
    两者,第一个在beg 和 end 中间查找val
    第二个在beg 和 end 中间查找是的pred为真的第一个元素
  3. 默认情况下,重排算法在将重排之后元素写会给定的输入序列中写到额外的目的空间的算法都在名字后面附加copy
  1. find( A,B,C) 在迭代器A,B之间选着C;,返回第一个与C 相等的迭代器,否则返回尾后迭代器
  2. count(a,b,c) 在a,b之间求c出现的次数
  3. accumulate(a,b,c) 把迭代器a,b之间的元素加到c上,返回和
  4. equal(a.begin(),a.end(),b.begin()) 比较a和b的大小,若相同返回true,否则,返回false,b 的长度必须大于或等于a
  5. fill(a,b,c) a,b 迭代器,c是一个元素,作用,将,a,b 之间的所有值都设为c fill_n 类似于fill 不过 a 代表迭代器,b 代表长度,c代表值,必须保证b的 长度 小于a.size()
  6. back_inserter 插入迭代器,一种保证算法有足够的空间了来容纳输出数据的的方法是插入迭代器,通常情况下,当我们通过一个迭代器向容器元素赋值时,值被赋予迭代器指向的元素,当我们通过插入迭代器赋值时,一个与赋值号右侧相等的元素被添加到容器中
  7. copy 算法,copy(a,b,c) a,b 迭代器,c,首迭代器,返回值是其目的位置迭代器(递增后)的值,即恰好指向,第二个容器拷贝完尾元素之后的位置
  8. replace 算法 replace(a,b,c,d)a,b 迭代器表示范围,c,要替换的值,d,替换后的值,如果希望保留原值不变,接受第三个迭代器,表示插入的位置
  9. find_if(a,b,c) 返回第一个符合条件的元素的迭代器
  10. for_each(a,b,c) 对a 到 b 的元素都执行c中操作
  11. transform(a,b,c,d) a,b 迭代器的范围,c插入的位置,d转换的法则 例如transform(vi.begin(),vi.end(),vi.begin(),[](int i) {return i>0? i:-i;};

特定容器算法,list 和forward_list 对于这两个,应该优先使用容器算法而不是通用算法
lst.,merge(lst2)
lst.merge(lst2,comp)
将lst2 中的元素并入lst, 并且要求这两者都是有序的,lst2中的元素都将被删除, 第一个默认小于运算符,第二个使用comp

lst.remove(val)
lst.remove_if(pred)
调用erase 将删除掉与val相等的元素
或者令一元谓词相等的元素
lst.reverse()
反转lst的元素的顺序
lst.sort()
lst.sort(comp)
使用给定的<或者给定比较函数
lst.unique()
lst.unique(pred)
调用erase删除同一个值得连续拷贝,第一个版本使用拷贝,第二个使用版本给定的二元谓词


splice 操作lsit 和 forward_list 的spice 操作

lst.splice(args),flst.splice_after(args);
(p,lst2)
p指向lst或者flst 插入到lst之前,或者flst之后,并销毁lst2
(p,lst2,p2)
p2 指向lst2 只对p2指向的元素操作
(p,lst2,a,b)
a,b 是lst2 的迭代器,对a,b 之间的元素进行操作