Udostępnij za pośrednictwem


Iterators

Urządzenia STL należy powszechność Iteratory do mediacji wśród różnych algorytmów i sekwencji, na których działają.Nazwa typu iteratora (lub jego prefiksu) wskazuje kategorii Iteratory wymagane dla tego typu.W celu zwiększenia mocy, kategorie są podsumowywane tutaj jako:

  • Dane wyjściowe.Iterację wyjściowego X może mieć tylko wartość V przechowywane pośrednich, po którym musi być zwiększane przed następnym magazynu, jak w (*X++ = V), (*X = V, ++X), lub (*X = V, X++).

  • Dane wejściowe.Iterację wprowadzania X może reprezentować pojedynczą wartość, która wskazuje koniec sekwencji.Jeśli iterację wejściowe nie porównuje równa wartości jego koniec sekwencji, może mieć wartość V dostęp pośredni na nim dowolną liczbę razy w (V = *X).Przejść do następnego wartość lub końcem sekwencji, inkrementacji, jak w ++X, X++, lub (V = *X++).Po inkrementacji żadnej kopii wejściowych iterację, żadne inne kopie można bezpiecznie porównać, dereferenced lub zwiększane po tej dacie.

  • Do przodu.Do przodu iteratora X może mieć miejsce iterację wyjściowego do zapisu lub iterację wejściowego do czytania.Można jednak odczytu (poprzez V = *X) co po prostu napisał (poprzez *X = V) poprzez iteratora do przodu.Można również wykonać wiele kopie iteratora do przodu, z których każdy można usunąć odwołania i zwiększany niezależnie.

  • Dwukierunkowy.Iteratora dwukierunkowy X może mieć miejsce z przodu iteratora.Użytkownik może jednak również dekrementacja iteratora dwukierunkowe, w--X, X--, lub (V = *X--).

  • Losowy dostęp.Iteratora random access X może zająć miejsce iteratora dwukierunkowego.Można również wykonywać znacznie samą całkowitą arytmetycznych na iteratora random access, która może na wskaźnik do obiektu.For N, an integer object, you can write xN,x + N,x - N, and N + X.

Należy zwrócić uwagę, że wskaźnik do obiektu może zająć miejsce iteratora random access lub innych iteratora.Iteratory wszystkie mogą być przypisane lub kopiowane.Są przyjmowane jako obiekty lekkie i są one często przekazywane i zwrócony przez wartość, nie przez odwołanie.Należy też zauważyć, że żadna z operacji, opisane wcześniej throw wyjątek podczas wykonywania na prawidłowe iteratora.

Hierarchia kategorii iteratora mogą być sumowane według pokazujący trzy sekwencji.Dostęp tylko do zapisu, do sekwencji można użyć dowolnego z:

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

Strzałka w prawo oznacza "może być zastąpione przez." Dowolny algorytm, który wzywa do iterację danych wyjściowych powinien działać estetycznie z iteratora do przodu, na przykład, ale nie na odwrót.

Dostęp tylko do odczytu do sekwencji można użyć dowolnego z:

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

W tym przypadku jest najsłabsze wszystkich kategorii iterację wejściowego.

Wreszcie dostępu do odczytu i zapisu do sekwencji, można ich:

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

Wskaźnik do obiektu może służyć jako iteratora random access zawsze, więc może służyć jako iteratora każdej z kategorii, jeśli obsługuje dostęp odczytu/zapisu, do sekwencji, który wyznacza go.

Iterację Iterator innych niż obiekt wskaźnik należy również zdefiniować typów elementów członkowskich, wymagane przez specjalizacji iterator_traits<Iterator>.Należy zauważyć, że te wymagania mogą zostać spełnione przez wynikających Iterator z klasy bazowej w publicznych iteratora.

To "algebraicznie" Iteratory jest praktycznie wszystkie inne podstawowe znaczenie w biblioteki standardowej szablonu.Jest ważne, aby zrozumieć obietnice i ograniczenia każdej kategorii iteratora, aby zobaczyć, jak Iteratory są używane pojemniki i algorytmów w STL.

[!UWAGA]

Można również użyć dla każdego z nich w do iteracji elementów w kolekcji STL.Aby uzyskać więcej informacji, zobacz Jak: iteracyjne przeglądanie zbioru STL z dla każdego.

Visual C++teraz oferuje sprawdzone Iteratory oraz Iteratory debugowania w celu zapewnienia, nie zastępuj granice pojemnika.Aby uzyskać więcej informacji, zobacz Iteratory zaznaczone i Obsługa iteratora debugowania.

Zobacz też

Informacje

Standardowa biblioteka szablonu

Bezpieczeństwo wątków w standardowa biblioteka języka C++