Menu
Coddy logo textTech

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 3

Abbiamo 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 1

Metodo 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

Max

Come 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 3

Metodo 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