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.   

posted @ 2015-04-30 16:19  lcchuguo  阅读(223)  评论(0编辑  收藏  举报