Iteratori di output
Lezione 15 di 23 del corso C++ - Libreria standard dei template di Coddy.
Iteratore di output è un iteratore usato per modificare il valore nel contenitore. È l'esatto opposto degli iteratori di input e svolge la funzione opposta. Viene usato per assegnare valori in una sequenza, ma non può essere usato per accedere a quei valori.

Come possiamo vedere, l'iteratore in avanti, l'iteratore bidirezionale e l'iteratore ad accesso casuale sono tutti iteratori di output validi.
Impareremo quindi le caratteristiche di un iteratore di output.
- Operatore di uguaglianza/disuguaglianza
A differenza degli iteratori di input, gli iteratori di output non possono essere confrontati tra loro per verificarne l'uguaglianza. Quindi, confrontarli usando gli operatori==e!=genererà un errore.
A == B // Sbagliato
A != B // Sbagliato- Dereferenziazione
Abbiamo usato la dereferenziazione di un iteratore di input per accedere al valore dell'elemento a cui punta l'iteratore. Con l'iteratore di output, usiamo l'operatore*per dereferenziare l'iteratore, in modo da poter assegnare un valore all'elemento a cui punta.
*A = 10 // Dereferenzia con *vector<int> numbers = {1, 2, 3, 4, 5};
vector<int>::iterator it;
for(it=numbers.begin(); it != numbers.end(); it++)
*it = 10;
for(it = numbers.begin(); it != numbers.end(); it++)
cout << *it << " ";Output:
10 10 10 10 10Nell'esempio precedente, abbiamo attraversato il vettore e assegnato a ogni elemento il valore 10 usando un iteratore di output.
- Incrementabile
Un iteratore di output può essere incrementato, in modo che dopo l'incremento faccia riferimento all'elemento successivo della sequenza. Per farlo usiamo l'operatore++
A++ // Operatore di post-incremento
++A // Operatore di pre-incremento- Scambiabile
È possibile scambiare due iteratori che puntano a posizioni diverse.
Un limite è che un iteratore di output può essere usato per assegnare un valore all'elemento a cui punta, ma non possiamo accedere a quel valore per, ad esempio, memorizzarlo in un'altra variabile.
*A = x; // Valido
x = *A; // Non validoSfida
MedioDato un numero N in input che rappresenta il numero di elementi che avrà il vettore. Nelle successive N righe viene fornito un numero. Memorizza tutti i numeri nel vettore. Dopodiché, usa un iteratore di output per assegnare a ogni elemento un valore incrementato di uno rispetto al suo valore e visualizza gli elementi modificati.
Input
5
10
20
30
40
50Output
11 21 31 41 51Provalo tu
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> numbers;
vector<int>::iterator it;
// Enter your code here
for(it = ; it != numbers.end(); )
{
}
for(it = ; ; )
{
cout << /* Enter here */ << " ";
}
return 0;
}Tutte le lezioni di C++ - Libreria standard dei template
Esercitati da solo: Compilatore C++ online