RISOLTO Funzione std::swap in std::reverse

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

Alessandro001

Utente Attivo
Messaggi
166
Reazioni
7
Punteggio
44
Salve, stavo guardando la funzione reverse su cplusplus ed ho notato una cosa che non mi è chiara.
Esordisco dicendo che ho poca dimestichezza con gli iteratori che al più presto studierò.

La funzione reverse ha questi parametri (str.begin(), str.end()) quindi rispettivamente il puntatore alla prima cella su cui applicare il metodo ed il puntatore all'ultima cella+1 su cui applicare il metodo.
Quindi se la stringa è "Ciao" str.begin() punterà a C mentre str.end() punterà subito dopo o.

Nel metodo reverse viene richiamata la funzione swap con parametri (first, last).
Dato che la funzione swap non fa altro che scambiare di posizione i valori passati, il valore puntato da first diventerà il valore puntato da last e viceversa. Però last è uguale all'ultima cella+1 pertanto come fa a scambiare i due valori?
Mi spiego con un esempio:

Se la stringa è S = "ciao"
first punterà a 'c' e last punterà ad 'o'+1
quando invocherà il metodo swap come fa a scambiare 'c' con 'o' se last non punta ad o?
 
std::reverse non richiama std::swap bensì std::iter_swap.

last è semplicemente decrementato prima della chiamata a std::iter_swap.
Questa è la probabile implementazione da cppreference
C++:
template<class BidirIt>
void reverse(BidirIt first, BidirIt last) {
    while ((first != last) && (first != --last)) {
        std::iter_swap(first++, last);
    }
}
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top