Menu
Coddy logo textTech

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 10

 Nell'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 valido
challenge icon

Sfida

Medio

Dato 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
50
Output
11 21 31 41 51

Provalo 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