Ho tre domande sullo scambio, molto probabilmente di base.Domande riguardanti le prestazioni dello scambio
(1) Per quanto riguarda le due contenitori stessi tipo STL a
e b
, entrambe le operazioni sotto funzionerebbero
swap(a,b);
a.swap(b);
comprendo che il secondo è specializzato per il contenitore (ad esempio, comporta solo un numero di iteratore swaps) mentre il primo è un algoritmo globale pensato per funzionare con i tipi di dati generici ed esegue un costrutto di copia interno.
La mia domanda è se scrivo il primo, il compilatore userà il secondo a prescindere, o devo fare attenzione a verificare se esiste una specializzazione appropriata?
(2) swap(a,b)
corrisponde alla stessa prestazione con swap(b,a)
? Se è coinvolto un copy-construct e gli oggetti hanno dimensioni considerevolmente diverse, sospetto che possa essere importante?
(3) Nei casi in cui l'operatore sovraccarico ==
esista ed è relativamente veloce, il controllo di a == b
prima dello scambio avrebbe senso in modo da evitare operazioni non necessarie. std::swap
applica prima questo controllo o esegue l'operazione indipendentemente?
Grazie per il vostro tempo!
Non tutto dipende dall'implementazione specifica dell'STL? Non penso che tu possa ricavare nulla dallo standard. –
Il numero 3 potrebbe essere dipendente dall'implementazione. 1 è esplicitamente richiesto. –
Grazie mille per la pronta risposta. – Chrys