Modificare gli algoritmi
Lezione 21 di 23 del corso C++ - Libreria standard dei template di Coddy.
In questa lezione imparerai a conoscere gli algoritmi modificatori presenti nella STL di C++.
Gli algoritmi modificatori sono progettati per alterare il valore degli elementi all'interno di un contenitore.
Vedremo i seguenti algoritmi:
copy()fill()move()swap()reverse()
Metodo copy()
Il metodo copy() copia gli elementi dall'intervallo definito da due iteratori nell'intervallo che inizia dal terzo iteratore
vector<int> v1 = {1, 2, 3};
vector<int> v2;
copy(v1.begin(), v1.end(), v2.begin());
for(auto value : v1)
cout << value << " ";Output:
1 2 3Abbiamo usato il metodo copy() per copiare il contenuto del vettore v1 nel vettore v2.
Metodo fill()
Questo metodo assegna a ogni elemento dell'intervallo specificato, definito da due iteratori, un valore dato.
vector<int> numbers(10); // crea un vettore vuoto con 10 elementi
fill(numbers.begin(), numbers.end(), 1);
for(auto value : numbers)
cout << value << " ";
cout << endl;
fill(numbers.begin(), numbers.end() - 3, 2);
for(auto value : numbers)
cout << value << " ";Output:
1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 1 1 1Metodo move()
Questo metodo sposta gli elementi dal contenitore corrente e restituisce il suo rvalue.
vector<string> names;
string first = "John";
string second = "Max";
names.push_back(first);
names.push_back(move(second));
cout << first << endl;
cout << second << endl;
cout << names[1];Output:
John
MaxCome puoi vedere, il metodo move() svuota la stringa, ma ne restituisce il valore e il metodo push_back() inserisce il valore nel vettore.
Metodo swap()
Questo metodo scambia gli elementi di due contenitori dello stesso tipo.
vector<int> v1 = {1, 2, 3};
vector<int> v2 = {4, 5, 6};
for(auto value : v1)
cout << value << " ";
for(auto value : v2)
cout << value << " ";
cout << endl;
swap(v1, v2);
for(auto value : v1)
cout << value << " ";
for(auto value : v2)
cout << value << " ";Output:
1 2 3 4 5 6
4 5 6 1 2 3Metodo reverse()
Questo metodo inverte l'ordine degli elementi di un contenitore, più precisamente nell'intervallo delimitato dai due iteratori.
vector<int> a = {1, 2, 3, 4, 5};
for(auto value : a)
cout << value << " ";
cout << endl;
reverse(a.begin(), a.end());
for(auto value : a)
cout << value << " ";Output:
1 2 3 4 5
5 4 3 2 1
Provalo tu
Questa lezione non include una sfida di codice.
Tutte le lezioni di C++ - Libreria standard dei template
Esercitati da solo: Compilatore C++ online