天天看点

STL算法reverse,reverse_copy

/**------http://blog.csdn.net/u010579068------**/  
#include<iostream>  
#include<cstdio>  
#include<string>  
#include<vector>  
#include<list>  
#include<deque>  
#include<algorithm>  
using namespace std;  
  
/***************************************** 
//所有容器适用 
reverse(b,e)        //逆转区间数据 
reverse_copy(b,e,b2) 
*****************************************/  
/**---------------------------------------------------------------------------------- 
STL算法 - 变序性算法 
 
reverse()           //逆转 
reverse_copy() 
rotate()            //旋转 
rotate_copy() 
next_permutation() 
prev_permutation() 
random_shuffle() 
partition() 
stable_partition() 
----------------------------------------------------------------------------------**/  
/************************************************************************************* 
std::reverse                     所有排序容器适用                           algorithm 
-------------------------------------------------------------------------------------- 
<algorithm>template <class BidirectionalIterator> 
  void reverse ( BidirectionalIterator first, BidirectionalIterator last); 
 
//eg: 
template <class BidirectionalIterator> 
  void reverse ( BidirectionalIterator first, BidirectionalIterator last) 
{ 
  while ((first!=last)&&(first!=--last)) 
    swap (*first++,*last); 
} 
*************************************************************************************/  
  
/************************************************************************************* 
std::reverse_copy                   所有排序容器适用                        algorithm 
-------------------------------------------------------------------------------------- 
template <class BidirectionalIterator, class OutputIterator> 
  OutputIterator reverse_copy ( BidirectionalIterator first, 
                                BidirectionalIterator last, OutputIterator result ); 
//eg: 
template <class BidirectionalIterator, class OutputIterator> 
  OutputIterator reverse_copy ( BidirectionalIterator first, 
                                BidirectionalIterator last, OutputIterator result ) 
{ 
  while (first!=last) *result++ = *--last; 
  return result; 
} 
*************************************************************************************/  
  
int main()  
{  
    vector<int> myvector;  
    vector<int>::iterator it;  
  
    // set some values:  
    for (int i=1; i<10; ++i) myvector.push_back(i); // 1 2 3 4 5 6 7 8 9  
  
    reverse(myvector.begin(),myvector.end());       // 9 8 7 6 5 4 3 2 1  
  
    // print out content:  
    cout << "myvector contains:";  
    for (it=myvector.begin(); it!=myvector.end(); ++it)  
        cout << " " << *it;  
    cout << endl;  
  
  
     int myints[] = {1,2,3};  
  
  cout << "The 3! possible permutations with 3 elements:\n";  
  
  sort (myints,myints+3);  
  reverse (myints,myints+3);  
  
  do {  
    cout << myints[0] << " " << myints[1] << " " << myints[2] << endl;  
  } while ( prev_permutation (myints,myints+3) );  
  
    /**-------------------------------------------------------------------------------------**/  
//    int myints[] = {1,2,3,4,5,6,7,8,9};  
    deque<int> mydeque;  
    deque<int>::iterator iq;  
  
    mydeque.resize(9);  
  
    reverse_copy (myvector.begin(), myvector.end(), mydeque.begin());  
  
    // print out content:  
    cout << "mydeque  contains:";  
    for (iq=mydeque.begin(); iq!=mydeque.end(); ++iq)  
        cout << " " << *iq;  
    cout << endl;  
  
  
  
    return 0;  
}  
           

继续阅读