1.algorithm
/*STL泛型算法
* 1.非修改型算法
* for_each()
* 第三个参数可以是普通一元函数,也可以是仿函数
* count(), count_if
* int count(iterator begin, iterator end, const T& value);//统计某个元素
* int count_if(iterator begin, iterator end, UnaryPredicate op);//统计op条件为真的元素个数
* min_element(), max_element()
* //如果有多个最值,只返回第一个找到的迭代器
* iterator min_element(iterator begin, iterator end);//以<进行比较
* iterator min_element(iterator begin, iterator end, compFunc op);//以op进行比较
* find(), find_if()
* //搜索第一个匹配的元素的迭代器
* iterator find (iterator begin, iterator end, const& T value);
* iterator find_if (iterator begin, iterator end, UnaryPredicate op);
* search_n(), search, find_end(), find_first_of()
* //搜索第一组,n个连续匹配的值都匹配,返回第一个元素的迭代器,失败返回end()
* iterator search_n (iterator begin, iterator end, size_t n, const T& value);
* iterator search_n (iterator begin, iterator end, size_t n, const T& value, BinaryPredicate op);
* //搜索第一个匹配的子区间
* iterator search(iterator begin, iterator end, iterator sbegin, iterator send);
* iterator search(iterator begin, iterator end, iterator sbegin, iterator send, BinaryPredicate op);
* //搜索最后一个匹配的子区间
* iterator find_end(iterator begin, iterator end, iterator sbegin, iterator send);
* iterator find_end(iterator begin, iterator end, iterator sbegin, iterator send,BinaryPredicate op);
* adjacent_find()
* //搜索两个连续相等的元素, T E 通常用迭代器
* template <class T>
* T adjacent_find(T first, T last);
* template <class T, class E>
* T adjacent_find(T first, T last, E pr);//pr是一个二元判断如void pr(int i, int j);
* 2.比较算法
* equal(), mismatch(), lexicographical_compare()
* bool equal(iterator start, iterator end, iterator comp_start);//比较两组迭代器内容是否相等,第二组只要给出起始位置,只比较到和第一组一样长的位置
* bool equal(iterator start, iterator end, iterator comp_start, Pred pr);//用自定义二元规则pr进行比较
* template<class T, class E>
* pair<T, E> mismatch(T first, T last, E compare_first); //一般都是迭代器T,E, 从头开始找不同的元素的位置
* tempolate<class T, class E>
* pair<T, E> mismatch(T first, T last, E comapre_first, Pred pr);
* bool lexicographical_compare(T first, T last, E first2, E last2);//字典式比较,第一组小于第二组则返回true
* bool lexicographical_compare(T first, T last, E first2, E last2, Pred pr);
* 3.修改性算法
* 注意:set, map类不可以用。它们只能使用自己的成员函数
* 3.1 复制
* copy(), copy_backward()
* iterator copy(iterator first, itreator last, iterator begin);//把first到last的元素正向复制到begin开始,覆盖,目标区间需要足够空间
* iterator copy_backward(iterator first, iterator last, iterator end);//把区间[first, last)从后向前复制到end结束
* 3.2 转换
* transform(),
* iterator transform(iterator first, iterator last, iterator begin, Unop op);//对[first, end)区间的每个元素调用op(ele)函数,写入begin开始的目标区间
* iterator transform(iterator first1, iterator last, iterator first2, iterator begin, Binop bop);//对区间[first, end)和对应的[first,)元素,调用二元函数bop(ele1, ele2),运算后写入[begin,)
* 3.3 互换
* swap()
* 3.4 赋值
* fill(), fill_n(), generate(), generate_n()
* void fill(iterator first, iterator last, const T& x);//对区间[first, last)赋x
* void fill_n(iterator begin, size_t n, const T& x);//对[begin, begin+n)赋x
* void generate(iterator first, iterator last, Gen g);//用子进程或仿函数对区间赋值
* void generate_n(iterator begin, size_t n, Gen g);
* 3.5 替换
* replace(), replace_if()
* void replace(iterator first, iterator last, const T& old, const T& new);//在区间把old替换成new
* void replace_if(iterator first, iterator last, Pred pr, const T& new);//在区间把满足一元判断的替换成ne