STL学习笔记(二) 会改变操作对象内容的算法

来源:互联网 发布:淘宝反黑联盟 编辑:程序博客网 时间:2024/05/17 03:45
拷贝某个区间
copy(InputIterator first, InputIterator last, OutputIterator result)
将range1的内容复制到[result, result + (last - first)
copy_backward(BidirectionalIterator1 first, BidirectionalIterator1 last, BidirectionIterator2 result)
将range1的内容复制到[result, result + (last - first),与copy不同的是,复制的顺序是从后往前复制,另外,Iterator必须是BidirectionalIterator


互换元素

swap(Assianable& a, Assignable& b)

swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2)

将两个大小相同的range的内容互换


transform(InputIterator first, InputIterator last, OutputIterator result, UnaryFunction op)

对range中的元素执行函数op,将返回值复制到range[result, result + (last - first))

transform (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, OutputIterator result, BinaryFunction binary_op)

对range1与range2中同一位置的元素执行binary_op,将返回值复制到[result, result + (last - first))


replace(ForwardIterator first, ForwardIterator last, const T& old_value, const T& new_value)

将旧值替换成新值

replace_if(ForwardIterator first, ForwardIterator last, Predict pred, const T& new_value)

将符合pred函数的旧值替换成新值

replace_copy(InputIterator first, InputIterator last, OutputIterator result, const T& old_value, const T& new_value)

将range中的值复制到[result, result + (last - first)), 在复制时将old_value替换成new_value

注意原来的range中值不会被改变

replace_copy_if(InputIterator first, InputIterator last, OutputIterator result, Predict pred, const T& new_value)

将old_value替换成pred的版本


fill(ForwardIterator first, ForwardIterator last, const T& value)

将value赋值给range中的每个元素

fill_n(ForwardIterator frist, size n, const T& value)

将value赋值给[first, first + n)中的所有元素,返回值为first + n


generate(ForwardIterator first, ForwardIterator last, Generate gen)

gen为一无参数的函数。函数对[first, last)中的所有i, 执行*i = gen()

generate(ForwardIterator first, size n, Generate gen)


remove(ForwardIterator first, ForwardIterator last, const T& value)

将值value从[first, last)中移除

例如:A[] = {1,2,3,4,5,6,4,8,4,10}

remove(A, A + 10, 4)

则A中的元素变为{1,2,3,5,6,8,10},即被移除后的值的位置被后面的值填充,但末尾的空位仍在(实际上末尾的值没有改变)

remove函数不会改变container的大小

remove(ForwardIterator first, ForwardIterator last, Predict pred)

加了pred的版本

remove_copy(InputIterator first, InputIterator last, OutputIterator result, const T& value)

算法从[first, last)中将元素复制至以result开头的range上,但不会复制与value相等的元素,返回值是[用来安放执行结果]的range的尾端。即如果有n个

元素与value不同,则返回值为result + n

remove_copy_if()

加了pred的版本


unique(FrowardIterator first, ForwardIterator last)

如果range中有连续出现的元素,则会移除该群中第一个之外的所有元素。

同样,空出来的位置会被后面的值填充

unique(ForwardIterator first, ForwardIterator last, BinaryPredict binary_pred)

unique_copy()