STL - rotate

Dal quinto capitolo di Designing Components with the C++ STL, di Ulrich Breymann. Algoritmi standard.

Sezione dedicata agli algoritmi che modificano le sequenze su cui operano.

5.4.12: rotate e rotate_copy

L'algoritmo rotate() tratta una sequenza come fosse un anello e applica una trasformazione che consiste nello spostare l'elemento puntato dal secondo iteratore passato all'inizio della sequenza, come identificata dal primo iteratore passato, e facendo in modo che tutti gli altri elementi siano spostati di conseguenza, ottenendo l'effetto di una rotazione.

Nella variante _copy la sequenza iniziale non viene modificata e il risultato della rotazione viene posto a partire dal quarto iteratore passato alla funzione in avanti.

Segue esempio per rotate():

#include<algorithm>
#include<vector>
#include<algo.h>

using namespace std;

void dump(const vector<int>& v) {
vector<int>::const_iterator it = v.begin();
while (it != v.end()) {
cout << *it++ << ' ';
}
cout << endl;
}

int main() {
vector<int> v(10);
iota(v.begin(), v.end(), 0);

cout << "Original sequence:" << endl;
dump(v);

for (size_t shift = 1; shift < 3; ++shift) {
cout << "Rotation by " << shift << endl;
for (int i = 0; i < v.size() / shift; ++i) {
rotate(v.begin(), v.begin() + shift, v.end());
dump(v);
}
}
}

Nessun commento:

Posta un commento