Condividi tramite


Iteratori

Le funzionalità della libreria STL consentono un utilizzo esteso degli iteratori mediare tra i diversi algoritmi e sequenze in cui agiscono.Il nome di un tipo di iteratore (o del prefisso indica la categoria degli iteratori di necessari per il tipo.Per potenza aumentando, le categorie sono riepilogate qui come:

  • Output.un iteratore di output X può avere un valore V indiretto archiviato in, dopo di che imperativo essere incrementato prima dell', come in (*X++ = V), (*X = V, C++X), o (*X = V, X++).

  • input.Un iteratore di input X può rappresentare un valore singolare che indica la fine della sequenza.Se un iteratore di input non vengono confrontati uguale al valore di entità finale-de-sequenza, può presentare un valore V indiretto eseguito su qualsiasi numero di volte, come in (V = *X).L'aumento del valore o la fine successivo nella sequenza, viene incrementato, come in C++X, X++ o,V = *X++).Una volta che viene incrementato una copia di un iteratore di input, nessuna delle altre copie possono essere confrontate, derefenziate, o essere incrementato successivamente.

  • In avanti.un iteratore avanti X può sostituire un iteratore di output per la scrittura o un iteratore di input per leggere.È possibile, tuttavia, leggere tramite V = *X) quanto è stato scritto solo tramite *X = V) con un iteratore avanti.È inoltre possibile eseguire più copie di un iteratore avanti, ognuno dei quali può dereferenziare indipendente e incrementato.

  • bidirezionale.un iteratore bidirezionale X può sostituire un iteratore avanti.È possibile, tuttavia, anche decrementare un iteratore bidirezionale, come in --X, X--, oV = *X--).

  • accesso casuale.Un iteratore di accesso casuale X può sostituire un iteratore bidirezionale.È inoltre possibile eseguire pressoché l'aritmetica Integer in un iteratore di accesso casuale configurabili in un puntatore all'oggetto.per N, un oggetto intero, è possibile scrivere x[N], x + N, x - Ne N + X.

Si noti che un puntatore a un oggetto può sostituire un iteratore di accesso casuale o qualsiasi altro iteratore.tutti gli iteratori possono essere assegnati o copiati.Si presuppone che siano oggetti luce e spesso vengono passati e restituiti per valore, non per riferimento.Si noti inoltre che nessuna delle operazioni descritte in precedenza possano generare un'eccezione se eseguite su un iteratore valido.

La gerarchia delle categorie di iteratore può essere riepilogata mostrando tre sequenze.Per l'accesso in scrittura a una sequenza, è possibile utilizzare qualsiasi opzione riportata di seguito:

output iterator
   -> forward iterator
   -> bidirectional iterator
   -> random-access iterator

Implementa freccia destra “possono essere sostituiti da.„ Qualsiasi algoritmo che richiede un iteratore di output deve eseguire piacevolmente con un iteratore avanti, ad esempio, ma non viceversa.

Per accesso in sola lettura a una sequenza, è possibile utilizzare qualsiasi opzione riportata di seguito:

input iterator
   -> forward iterator
   -> bidirectional iterator
   -> random-access iterator

Un iteratore di input è più debole di tutte le categorie, in questo caso.

Infine, per l'accesso in lettura/scrittura a una sequenza, è possibile utilizzare qualsiasi opzione riportata di seguito:

forward iterator
   -> bidirectional iterator
   -> random-access iterator

Un puntatore a un oggetto può fornire sempre dagli iteratori di accesso casuale, pertanto può fungere da qualsiasi categoria di iteratore se supporta l'accesso in lettura/scrittura appropriato alla sequenza che definisce.

un iteratore Iterator diverso da un puntatore all'oggetto inoltre necessario definire i tipi di membri richiesti dalla specializzazione iterator_traits<Iterator>.Si noti che le pretese possono essere soddisfatti derivando Iterator dalla classe base pubblica iteratore.

Questa “algebra„ degli iteratori è fondamentale per praticamente qualsiasi altra nella libreria di modelli standard.È importante comprendere le promesse e le limitazioni di ogni categoria di iteratore vedere come gli iteratori vengono utilizzati dai contenitori e gli algoritmi in STL.

[!NOTA]

È inoltre possibile utilizzare per ognuna di esse, in per scorrere le raccolte STL.Per ulteriori informazioni, vedere Procedura: Scorrere la libreria STL con per ciascuno.

Visual C++ ora offre gli iteratori verificati e gli iteratori di debug per assicurarsi di non sovrascrivere i limiti del contenitore.Per ulteriori informazioni, vedere Iteratori verificati e Supporto iteratori di debug.

Vedere anche

Riferimenti

Libreria di modelli standard

Thread safety della libreria C++ standard