Così, quando abbiamo bisogno di attraversare un contenitore dall'inizio alla fine abbiamo scrivere qualcosa di simileIn che modo end() è implementato nei contenitori STL?
for (i = v->begin(); i != v->end(); i++)
assumendo i
è un iteratore per il contenitore v
.
La mia domanda è "che cosa garantisce che la fine punta sempre a passare l'ultimo elemento nel contenitore?" In che modo STL garantisce questo comportamento e c'è qualche possibilità che questo caso non sia vero?
L'STL non garantisce questo comportamento. STL ** implementa ** questo comportamento in base ai requisiti definiti dallo standard. Lo standard dice che questo è il modo in cui dovrebbe funzionare lo sviluppatore che implementa il STL dovrebbe quindi far funzionare correttamente l'STL. –
Non è la migliore pratica. Preferisco l'operatore di pre-incremento ++ i piuttosto che i ++ quando non si memorizza il valore. Per molti tipi è più veloce. –
@Jive Dadson: questa non è la mia preoccupazione principale -> ricalcolare 'v-> end()' ad ogni giro del ciclo è certamente meno efficiente ... 'for (auto it = v.begin(), end = v .end(); it! = end; ++ it) 'è la forma canonica, anche se in C++ 0x si potrebbe anche usare' for (auto val: v) 'o' std :: foreach' e un lambda funzione. –