2010-06-22 17 views
9

vedo da qualche parte si parla:C++ iteratore in per errori di loop?

for (itr = files.begin(); itr < files.end(); ++itr) // WRONG 
for (itr = files.begin(); itr != files.end(); ++itr) // ok 

Perché è la prima espressione sbagliata? Ho sempre usato la prima espressione e non ho avuto problemi.

risposta

21

ordinazione confronti come <, >, <=, >= lavorerà per iteratori ad accesso casuale, ma molti altri iteratori (come iteratori bidirezionali su liste collegate) supportano solo l'uguaglianza di test (== e !=). Utilizzando != è possibile sostituire in un secondo momento il contenitore senza dover cambiare tanto codice, e questo è particolarmente importante per il codice del modello che deve funzionare con molti tipi di contenitori diversi.

7

Esistono diversi tipi di iteratori. Solo gli iteratori ad accesso casuale supportano l'operatore <. Altri tipi di iteratori (bidirezionale, input, output e forward) non lo fanno. Ma tutti gli iteratori supportano gli operatori == e !=. Pertanto il tuo codice funzionerà con tutti i tipi di iteratori se usi !=.

5

Il primo funziona solo per gli iteratori che supportano operator <, che non tutti gli iteratori fanno.