La documentazione precisa che si tratta const_iterators dovrebbero essere usati quando possibile dal momento che sono più veloci.
Lo fa sicuramente. Da http://qt-project.org/doc/qt-4.8/containers.html#stl-style-iterators:
Per ogni classe contenitore, ci sono due tipi di iteratori STL-stile: uno che fornisce accesso in sola lettura e uno che fornisce accesso in lettura-scrittura. Gli iteratori di sola lettura dovrebbero essere utilizzati laddove possibile perché sono più veloci degli iteratori di lettura-scrittura.
Che cosa stupida da dire.
Più sicuro? Sì. Più veloce? Anche se questo fosse il caso (apparentemente non è con gcc e clang), raramente è un motivo per preferire gli iteratori const su quelli non costanti. Questa è l'ottimizzazione prematura. La ragione per preferire gli iteratori const su quelli non costanti è la sicurezza. Se non è necessario modificare i contenuti puntati, utilizzare un iteratore const. Pensa a ciò che alcuni programmatori di manutenzione faranno al tuo codice.
Per quanto riguarda begin
rispetto a cbegin
, si tratta di un'aggiunta di C++ 11. Ciò consente alla parola chiave auto
di utilizzare un iteratore const, anche in un'impostazione non const.
fonte
2012-04-30 12:01:48
Quando si passa dall'antico stl alla versione corrente della libreria standard C++, si otterrà una funzione cbegin che restituisce const_iterators. Si noti inoltre che è possibile assegnare iteratori a const_iterators e che la versione const di begin restituisce anche un iteratore const (tutto per la libreria standard C++). – PlasmaHH
Il mio riferimento era cplusplus.com. Non c'è cbegin(). Puoi indicarmi un riferimento STL piacevole e aggiornato? Ora la domanda è ancora più pressante poiché esiste un metodo cbegin() ... – HWende
La funzione che PlasmaHH sta puntando fa parte di C++ 11: [articolo] (http://www.cplusplus.com/articles/EzywvCM9 /) ma non so se ci sono problemi di prestazioni per l'utilizzo degli iteratori anziché degli iteratori const. – Uflex