首页 > 代码库 > STL中基本的算法(一)

STL中基本的算法(一)

一。replace()

       替换算法将指定元素值替换为新值,使用原型如下,将迭代器[first,last)中值为old_value的元素全部替换为new_value值。

函数原型:

  1. template < class ForwardIterator, class T >  
  2.   void replace ( ForwardIterator first, ForwardIterator last,  
  3.                  const T& old_value, const T& new_value );  

     参数说明:

first, last
指出要替换的迭代器区间[first,last)
old_value
将要被替换的元素值
new_value
将要替换旧值的新值

二、swap()

     我们先来看看swap的函数原型:

  1. template <class T> void swap ( T& a, T& b )  
  2. {  
  3.   T c(a); a=b; b=c;  
  4. }  
  5.   

三、copy()

元素复制算法copy。该算法主要用于容器之间元素的拷贝,即将迭代器区间[first,last)的元素复制到由复制目标result给定的区间[result,result+(last-first))中。下面我们来看看它的函数原型:

函数原形:

  1. template<class InputIterator, class OutputIterator>  
  2.    OutputIterator copy(  
  3.       InputIterator _First,   
  4.       InputIterator _Last,   
  5.       OutputIterator _DestBeg  
  6.    );  

参数

_First, _Last
指出被复制的元素的区间范围[ _First,_Last).
_DestBeg 
指出复制到的目标区间起始位置

返回值

返回一个迭代器,指出已被复制的最后一个元素的下一个位置

四、copy_backward()

copy_backward算法与copy在行为方面相似,只不过它的复制过程与copy背道而驰,其复制过程是从最后的元素开始复制,直到首元素复制出来。也就是说,复制操作是从last-1开始,直到first结束。这些元素也被从后向前复制到目标容器中,从result-1开始,一直复制last-first个元素。举个简单的例子:已知vector {0, 1, 2, 3, 4, 5},现我们需要把最后三个元素(3, 4, 5)复制到前面三个(0, 1, 2)位置中,那我们可以这样设置:将first设置值3的位置,将last设置为5的下一个位置,而result设置为3的位置,这样,就会先将值5复制到2的位置,然后4复制到1的位置,最后3复制到0的位置,得到我们所要的序列{3, 4, 5, 3, 4, 5}。下面我们来看一下copy_backward的函数原型:

函数原型:

  1. template<class BidirectionalIterator1, class BidirectionalIterator2>  
  2.  BidirectionalIterator2 copy_backward ( BidirectionalIterator1 first,  
  3.                                         BidirectionalIterator1 last,  
  4.                                         BidirectionalIterator2 result);   

 参数:

       first, last
       指出被复制的元素的区间范围[first,last).
       result
       指出复制到目标区间的具体位置[result-(last-first),result)

 返回值:

        返回一个迭代器,指出已被复制元素区间的起始位置

五、find_end()

      find_end算法在一个序列中搜索出最后一个与另一序列匹配的子序列。有如下两个函数原型,在迭代器区间[first1, last1)中搜索出与迭代器区间[first2, last2)元素匹配的子序列,返回首元素的迭代器或last1。

       函数原型:

  1. template<class ForwardIterator1, class ForwardIterator2>  
  2.    ForwardIterator1 find_end(  
  3.       ForwardIterator1 _First1,   
  4.       ForwardIterator1 _Last1,  
  5.       ForwardIterator2 _First2,   
  6.       ForwardIterator2 _Last2  
  7.    );  
  8. template<class ForwardIterator1, class ForwardIterator2, class Pr>  
  9.    ForwardIterator1 find_end(  
  10.       ForwardIterator1 _First1,   
  11.       ForwardIterator1 _Last1,  
  12.       ForwardIterator2 _First2,   
  13.       ForwardIterator2 _Last2,  
  14.       BinaryPredicate _Comp  
  15.    );  
  16.