rotate_copy
Scambia gli elementi in due intervalli adiacenti in un intervallo di origine e copia il risultato in un intervallo di destinazione.
template<class ForwardIterator, class OutputIterator>
OutputIterator rotate_copy(
ForwardIterator _First,
ForwardIterator _Middle,
ForwardIterator _Last,
OutputIterator _Result
);
Parametri
_First
Un iteratore avanti destinato alla posizione del primo elemento nell'intervallo da rotazione._Middle
Un iteratore avanti che definisce il limite nell'intervallo destinato alla posizione del primo elemento nella seconda parte dell'intervallo dei cui elementi è possibile scambiare a quelli presenti nella prima parte dell'intervallo._ Last
Un iteratore avanti destinato alla posizione una dopo l'elemento finale nell'intervallo da rotazione._Result
Un iteratore di output destinato alla posizione del primo elemento nell'intervallo di destinazione.
Valore restituito
Un iteratore di output destinato alla posizione una dopo l'elemento finale nell'intervallo di destinazione.
Note
Gli intervalli fatto riferimento siano validi, tutti i puntatori devono essere dereferenceable e all'interno della sequenza dell'ultima posizione è raggiungibile da prima dall'aumento.
Complessità è lineare con il massimo (_Last –) _Firstgli scambi.
rotate_copy dispone di due form correlati:
Per informazioni su come queste funzioni si comportano, vedere Iteratori verificati.
Esempio
// alg_rotate_copy.cpp
// compile with: /EHsc
#include <vector>
#include <deque>
#include <algorithm>
#include <iostream>
int main() {
using namespace std;
vector <int> v1 , v2 ( 9 );
deque <int> d1 , d2 ( 6 );
vector <int>::iterator v1Iter , v2Iter;
deque<int>::iterator d1Iter , d2Iter;
int i;
for ( i = -3 ; i <= 5 ; i++ )
v1.push_back( i );
int ii;
for ( ii =0 ; ii <= 5 ; ii++ )
d1.push_back( ii );
cout << "Vector v1 is ( " ;
for ( v1Iter = v1.begin( ) ; v1Iter != v1.end( ) ;v1Iter ++ )
cout << *v1Iter << " ";
cout << ")." << endl;
rotate_copy ( v1.begin ( ) , v1.begin ( ) + 3 , v1.end ( ) , v2.begin ( ) );
cout << "After rotating, the vector v1 remains unchanged as:\n v1 = ( " ;
for ( v1Iter = v1.begin( ) ; v1Iter != v1.end( ) ;v1Iter ++ )
cout << *v1Iter << " ";
cout << ")." << endl;
cout << "After rotating, the copy of vector v1 in v2 is:\n v2 = ( " ;
for ( v2Iter = v2.begin( ) ; v2Iter != v2.end( ) ;v2Iter ++ )
cout << *v2Iter << " ";
cout << ")." << endl;
cout << "The original deque d1 is ( " ;
for ( d1Iter = d1.begin( ) ; d1Iter != d1.end( ) ;d1Iter ++ )
cout << *d1Iter << " ";
cout << ")." << endl;
int iii = 1;
while ( iii <= d1.end ( ) - d1.begin ( ) )
{
rotate_copy ( d1.begin ( ) , d1.begin ( ) + iii , d1.end ( ) , d2.begin ( ) );
cout << "After the rotation of a single deque element to the back,\n d2 is ( " ;
for ( d2Iter = d2.begin( ) ; d2Iter != d2.end( ) ;d2Iter ++ )
cout << *d2Iter << " ";
cout << ")." << endl;
iii++;
}
}
Output
Vector v1 is ( -3 -2 -1 0 1 2 3 4 5 ).
After rotating, the vector v1 remains unchanged as:
v1 = ( -3 -2 -1 0 1 2 3 4 5 ).
After rotating, the copy of vector v1 in v2 is:
v2 = ( 0 1 2 3 4 5 -3 -2 -1 ).
The original deque d1 is ( 0 1 2 3 4 5 ).
After the rotation of a single deque element to the back,
d2 is ( 1 2 3 4 5 0 ).
After the rotation of a single deque element to the back,
d2 is ( 2 3 4 5 0 1 ).
After the rotation of a single deque element to the back,
d2 is ( 3 4 5 0 1 2 ).
After the rotation of a single deque element to the back,
d2 is ( 4 5 0 1 2 3 ).
After the rotation of a single deque element to the back,
d2 is ( 5 0 1 2 3 4 ).
After the rotation of a single deque element to the back,
d2 is ( 0 1 2 3 4 5 ).
Requisiti
intestazione: <algorithm>
Spazio dei nomi: deviazione standard