C++ STL algorithm部分用法(1)

(1) copy函数:MSDN中的定义是这样子的,参数_First是源数组(或集合)对象的起始指针(或迭代器),参数_Last是源数组(或集合)对象的末尾指针(或迭代器),参数_DestBeg是目标数组(或集合)对象的起始指针(或迭代器)。

template < class  InputIterator,  class  OutputIterator >
   OutputIterator copy(
      InputIterator _First, 
      InputIterator _Last, 
      OutputIterator _DestBeg
   );

示例代码如下:

//  alg_copy.cpp
//  compile with: /EHsc
#include  < vector >
#include 
< algorithm >
#include 
< iostream >

int  main()  {
   using namespace std;
   vector 
<int> v1, v2;
   vector 
<int>::iterator Iter1, Iter2;

   
int i;
   
for ( i = 0 ; i <= 5 ; i++ )
      v1.push_back( 
10 * i );

   
int ii;
   
for ( ii = 0 ; ii <= 10 ; ii++ )
      v2.push_back( 
3 * ii );

   cout 
<< "v1 = ( " ;
   
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout 
<< *Iter1 << " ";
   cout 
<< ")" << endl;

   cout 
<< "v2 = ( " ;
   
for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
      cout 
<< *Iter2 << " ";
   cout 
<< ")" << endl;

   
// To copy the first 3 elements of v1 into the middle of v2
   copy( v1.begin( ), v1.begin( ) + 3, v2.begin( ) + 4 );

   cout 
<< "v2 with v1 insert = ( " ;
   
for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
      cout 
<< *Iter2 << " ";
   cout 
<< ")" << endl;

   
// To shift the elements inserted into v2 two positions
   
// to the left
   copy( v2.begin( )+4, v2.begin( ) + 7, v2.begin( ) + 2 );

   cout 
<< "v2 with shifted insert = ( " ;
   
for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
      cout 
<< *Iter2 << " ";
   cout 
<< ")" << endl;
}

(2)find函数:MSDN中的定义是这样子的,参数_First是数组(或集合)对象的起始指针(或迭代器),参数_Last是数组(或集合)对象的末尾指针(或迭代器),参数_Val是数组(或集合)对象要查找的值。

template < class  InputIterator,  class  Type >
   InputIterator find(
      InputIterator _First, 
      InputIterator _Last, 
      
const  Type &  _Val
   );

示例代码如下:

//  alg_find.cpp
//  compile with: /EHsc 
#include  < list >
#include 
< algorithm >
#include 
< iostream >

int  main()  {
   using namespace std;

   list 
<int> L;
   list 
<int>::iterator Iter;
   list 
<int>::iterator result;
   
   L.push_back( 
40 );
   L.push_back( 
20 );
   L.push_back( 
10 );
   L.push_back( 
30 );
   L.push_back( 
10 );

   cout 
<< "L = ( " ;
   
for ( Iter = L.begin( ) ; Iter != L.end( ) ; Iter++ )
      cout 
<< *Iter << " ";
   cout 
<< ")" << endl;
   
   result 
= find( L.begin( ), L.end( ), 10 );
   
if  ( result == L.end( ) )
      cout 
<< "There is no 10 in list L.";
   
else {
      cout 
<< "There is a 10 in list L";
      
if ( ++result != L.end() )
         cout 
<< " and it is followed by a " << *result << ".";
   }

   cout 
<< endl;
}

(3)replace函数:MSDN中的定义是这样子的,参数_First是数组(或集合)对象的起始指针(或迭代器),参数_Last是数组(或集合)对象的末尾指针(或迭代器),参数_OldVal是数组(或集合)要被替代的原值,参数_NewVal是数组(或集合)替代的新值。

template < class  ForwardIterator,  class  Type >
   
void  replace(
      ForwardIterator _First, 
      ForwardIterator _Last,
      
const  Type &  _OldVal, 
      
const  Type &  _NewVal
   );

示例代码如下:

//  alg_replace.cpp
//  compile with: /EHsc
#include  < vector >
#include 
< algorithm >
#include 
< iostream >

int  main( )  {
   using namespace std;
   vector 
<int> v1;
   vector 
<int>::iterator Iter1;

   
int i;
   
for ( i = 0 ; i <= 9 ; i++ )
      v1.push_back( i );

   
int ii;
   
for ( ii = 0 ; ii <= 3 ; ii++ )
      v1.push_back( 
7 );
   
   random_shuffle (v1.begin( ), v1.end( ) );
   cout 
<< "The original vector v1 is:  ( " ;
   
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout 
<< *Iter1 << " ";
   cout 
<< ")." << endl;

   
// Replace elements with a value of 7 with a value of 700
   replace (v1.begin( ), v1.end( ), 7 , 700);

   cout 
<< "The vector v1 with a value 700 replacing that of 7 is:  ( " ;
   
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout 
<< *Iter1 << " ";
   cout 
<< ")." << endl;
}

(4)sort函数:MSDN中的定义是这样子的,参数_First是数组(或集合)对象的起始指针(或迭代器),参数_Last是数组(或集合)对象的末尾指针(或迭代器),指定了在一个范围内的值进行排序。

template < class  RandomAccessIterator >
   
void  sort(
      RandomAccessIterator _First, 
      RandomAccessIterator _Last
   );

示例代码如下:
//  alg_sort.cpp
//  compile with: /EHsc
#include  < vector >
#include 
< algorithm >
#include 
< functional >        //  For greater<int>( )
#include  < iostream >

//  Return whether first element is greater than the second
bool UDgreater (  int  elem1,  int  elem2 )
{
   
return elem1 > elem2;
}


int  main( )
{
   using namespace std;
   vector 
<int> v1;
   vector 
<int>::iterator Iter1;

   
int i;
   
for ( i = 0 ; i <= 5 ; i++ )
   
{
      v1.push_back( 
2 * i );
   }


   
int ii;
   
for ( ii = 0 ; ii <= 5 ; ii++ )
   
{
      v1.push_back( 
2 * ii + 1 );
   }


   cout 
<< "Original vector v1 = ( " ;
   
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout 
<< *Iter1 << " ";
   cout 
<< ")" << endl;

   sort( v1.begin( ), v1.end( ) );
   cout 
<< "Sorted vector v1 = ( " ;
   
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout 
<< *Iter1 << " ";
   cout 
<< ")" << endl;

   
// To sort in descending order. specify binary predicate
   sort( v1.begin( ), v1.end( ), greater<int>( ) );
   cout 
<< "Resorted (greater) vector v1 = ( " ;
   
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout 
<< *Iter1 << " ";
   cout 
<< ")" << endl;

   
// A user-defined (UD) binary predicate can also be used
   sort( v1.begin( ), v1.end( ), UDgreater );
   cout 
<< "Resorted (UDgreater) vector v1 = ( " ;
   
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout 
<< *Iter1 << " ";
   cout 
<< ")" << endl;
}

(5)random_shuffle函数:MSDN中的定义是这样子的,参数_First是数组(或集合)对象的起始指针(或迭代器),参数_Last是数组(或集合)对象的末尾指针(或迭代器),指定了在一个范围内随机打乱数据排列顺序。

template < class  RandomAccessIterator >
   
void  random_shuffle(
      RandomAccessIterator _First, 
      RandomAccessIterator _Last
      );

示例代码如下:

//  alg_random_shuffle.cpp
//  compile with: /EHsc
#include  < vector >
#include 
< algorithm >
#include 
< functional >
#include 
< iostream >

int  main( )  {
   using namespace std;
   vector 
<int> v1;
   vector 
<int>::iterator Iter1, Iter2;

   
int i;
   
for ( i = 1 ; i <= 9 ; i++ )
      v1.push_back( i );

   random_shuffle( v1.begin( ), v1.end( ) );
   cout 
<< "The original version of vector v1 is: ( " ;
   
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout 
<< *Iter1 << " ";
   cout 
<< ")." << endl;

   
// Shuffled once
   random_shuffle( v1.begin( ), v1.end( ));
   push_heap( v1.begin( ), v1.end( ) );
   cout 
<< "Vector v1 after one shuffle is:       ( " ;
   
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout 
<< *Iter1 << " ";
   cout 
<< ")." << endl;

   
// Shuffled again
   random_shuffle( v1.begin( ), v1.end( ));
   push_heap( v1.begin( ), v1.end( ) );
   cout 
<< "Vector v1 after another shuffle is:   ( " ;
   
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout 
<< *Iter1 << " ";
   cout 
<< ")." << endl;
}

刚接触过STL,认识了几个函数的用法,使用起来也真的挺方便的。特别写出来记念。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值